Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/project-model/src/project_json.rs')
| -rw-r--r-- | crates/project-model/src/project_json.rs | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/crates/project-model/src/project_json.rs b/crates/project-model/src/project_json.rs index 4b2448e47f..0f779e5307 100644 --- a/crates/project-model/src/project_json.rs +++ b/crates/project-model/src/project_json.rs @@ -54,7 +54,7 @@ use std::path::PathBuf; use base_db::{CrateDisplayName, CrateId, CrateName, Dependency, Edition}; use paths::{AbsPath, AbsPathBuf}; use rustc_hash::FxHashMap; -use serde::{de, Deserialize}; +use serde::{de, ser, Deserialize, Serialize}; use crate::cfg_flag::CfgFlag; @@ -171,14 +171,14 @@ impl ProjectJson { } } -#[derive(Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Debug, Clone)] pub struct ProjectJsonData { sysroot: Option<PathBuf>, sysroot_src: Option<PathBuf>, crates: Vec<CrateData>, } -#[derive(Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Debug, Clone)] struct CrateData { display_name: Option<String>, root_module: PathBuf, @@ -200,7 +200,7 @@ struct CrateData { repository: Option<String>, } -#[derive(Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Debug, Clone)] #[serde(rename = "edition")] enum EditionData { #[serde(rename = "2015")] @@ -221,16 +221,16 @@ impl From<EditionData> for Edition { } } -#[derive(Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Debug, Clone)] struct DepData { /// Identifies a crate by position in the crates array. #[serde(rename = "crate")] krate: usize, - #[serde(deserialize_with = "deserialize_crate_name")] + #[serde(deserialize_with = "deserialize_crate_name", serialize_with = "serialize_crate_name")] name: CrateName, } -#[derive(Deserialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Debug, Clone)] struct CrateSource { include_dirs: Vec<PathBuf>, exclude_dirs: Vec<PathBuf>, @@ -243,3 +243,10 @@ where let name = String::deserialize(de)?; CrateName::new(&name).map_err(|err| de::Error::custom(format!("invalid crate name: {err:?}"))) } + +fn serialize_crate_name<S>(crate_name: &CrateName, serializer: S) -> Result<S::Ok, S::Error> +where + S: ser::Serializer, +{ + crate_name.serialize(serializer) +} |