apivolve_generator_api 0.1.1

Api for creating generators for Apivolve, an API evolution tool that helps keep your APIs backwards compatible yet clean.
Documentation
use ::std::path::PathBuf;

pub use ::semver::Version;
use ::serde::Deserialize;
use ::serde::Serialize;
use ::smallvec::SmallVec;

use crate::gen1::data::Party;

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct UserPreferences {
    pub apivolve_version: Version,
    pub output_dir: PathBuf,
    #[serde(skip_serializing_if = "Vec::is_empty")]
    pub extra_args: Vec<String>,
    pub requested_parties: SmallVec<[Party; 3]>,
}

#[cfg(test)]
mod tests {
    use ::smallvec::smallvec;

    use super::*;

    #[test]
    fn serialize() {
        let json = serde_json::to_string(&UserPreferences {
            apivolve_version: Version::new(1, 2, 4),
            output_dir: PathBuf::from("/tmp"),
            extra_args: vec!["--strict".to_string()],
            requested_parties: smallvec![],
        })
        .unwrap();
        assert_eq!(
            json,
            "{\"apivolve_version\":\"1.2.4\",\"output_dir\":\"/tmp\",\"extra_args\":[\"--strict\"]}"
        );
    }

    #[test]
    fn deserialize() {
        let config: UserPreferences = serde_json::from_str(
            "{\"apivolve_version\":\"1.2.4\",\"output_dir\":\"/tmp\",\"extra_args\":[\"--strict\"]}",
        )
            .unwrap();
        assert_eq!(
            config,
            UserPreferences {
                apivolve_version: Version::new(1, 2, 4),
                output_dir: PathBuf::from("/tmp"),
                extra_args: vec!["--strict".to_string()],
                requested_parties: smallvec![],
            }
        )
    }
}