diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2021-02-01 14:30:41 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-01 14:30:41 +1100 |
commit | 534531e4dd4133ff22f775b385ba488ec747cead (patch) | |
tree | a3f4fcd57ab661acb3b05f4c54ad80af42a86b22 /core/module_specifier.rs | |
parent | 46d5843f753548415c87f3c8a868bba49c203b92 (diff) |
feat(lsp): add references code lens (#9316)
Diffstat (limited to 'core/module_specifier.rs')
-rw-r--r-- | core/module_specifier.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/core/module_specifier.rs b/core/module_specifier.rs index e0e8719ea..a9ce57099 100644 --- a/core/module_specifier.rs +++ b/core/module_specifier.rs @@ -1,6 +1,9 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. use crate::normalize_path; +use serde::de; +use serde::Deserialize; +use serde::Deserializer; use std::env::current_dir; use std::error::Error; use std::fmt; @@ -209,9 +212,21 @@ impl PartialEq<String> for ModuleSpecifier { } } +impl<'de> Deserialize<'de> for ModuleSpecifier { + fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> + where + D: Deserializer<'de>, + { + let url_str: String = Deserialize::deserialize(deserializer)?; + ModuleSpecifier::resolve_url(&url_str).map_err(de::Error::custom) + } +} + #[cfg(test)] mod tests { use super::*; + use crate::serde_json::from_value; + use crate::serde_json::json; use std::path::Path; #[test] @@ -545,4 +560,13 @@ mod tests { ); } } + + #[test] + fn test_deserialize_module_specifier() { + let actual: ModuleSpecifier = + from_value(json!("http://deno.land/x/mod.ts")).unwrap(); + let expected = + ModuleSpecifier::resolve_url("http://deno.land/x/mod.ts").unwrap(); + assert_eq!(actual, expected); + } } |