use std::rc::Rc;
use semver::Version;
+
+use serde::{Serialize, Serializer};
+
use core::{Dependency, PackageId, SourceId};
use core::interning::InternedString;
/// * A feature in a depedency
///
/// The selection between these 3 things happens as part of the construction of the FeatureValue.
-#[derive(Clone, Debug, Serialize)]
+#[derive(Clone, Debug)]
pub enum FeatureValue {
Feature(InternedString),
Crate(InternedString),
}
}
+impl Serialize for FeatureValue {
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
+ where
+ S: Serializer,
+ {
+ use self::FeatureValue::*;
+ match *self {
+ Feature(ref f) => serializer.serialize_str(f),
+ Crate(ref c) => serializer.serialize_str(c),
+ CrateFeature(ref c, ref f) => {
+ serializer.serialize_str(&[c.as_ref(), f.as_ref()].join("/"))
+ }
+ }
+ }
+}
+
pub type FeatureMap = BTreeMap<String, Vec<FeatureValue>>;