summaryrefslogtreecommitdiff
path: root/core/module_specifier.rs
diff options
context:
space:
mode:
authorKitson Kelly <me@kitsonkelly.com>2021-02-01 14:30:41 +1100
committerGitHub <noreply@github.com>2021-02-01 14:30:41 +1100
commit534531e4dd4133ff22f775b385ba488ec747cead (patch)
treea3f4fcd57ab661acb3b05f4c54ad80af42a86b22 /core/module_specifier.rs
parent46d5843f753548415c87f3c8a868bba49c203b92 (diff)
feat(lsp): add references code lens (#9316)
Diffstat (limited to 'core/module_specifier.rs')
-rw-r--r--core/module_specifier.rs24
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);
+ }
}