use serde::Deserialize;
use xml_struct::XmlSerialize;
use crate::Error;
#[allow(non_camel_case_types)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Deserialize, XmlSerialize)]
#[xml_struct(text)]
pub enum ExchangeServerVersion {
Exchange2007,
Exchange2007_SP1,
Exchange2010,
Exchange2010_SP1,
Exchange2010_SP2,
Exchange2013,
Exchange2013_SP1,
}
impl TryFrom<&str> for ExchangeServerVersion {
type Error = Error;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value {
"Exchange2007" => Ok(ExchangeServerVersion::Exchange2007),
"Exchange2007_SP1" => Ok(ExchangeServerVersion::Exchange2007_SP1),
"Exchange2010" => Ok(ExchangeServerVersion::Exchange2010),
"Exchange2010_SP1" => Ok(ExchangeServerVersion::Exchange2010_SP1),
"Exchange2010_SP2" => Ok(ExchangeServerVersion::Exchange2010_SP2),
"Exchange2013" => Ok(ExchangeServerVersion::Exchange2013),
"Exchange2013_SP1" => Ok(ExchangeServerVersion::Exchange2013_SP1),
_ => Err(Error::UnknownServerVersion(value.to_owned())),
}
}
}
impl From<ExchangeServerVersion> for String {
fn from(value: ExchangeServerVersion) -> Self {
match value {
ExchangeServerVersion::Exchange2007 => "Exchange2007",
ExchangeServerVersion::Exchange2007_SP1 => "Exchange2007_SP1",
ExchangeServerVersion::Exchange2010 => "Exchange2010",
ExchangeServerVersion::Exchange2010_SP1 => "Exchange2010_SP1",
ExchangeServerVersion::Exchange2010_SP2 => "Exchange2010_SP2",
ExchangeServerVersion::Exchange2013 => "Exchange2013",
ExchangeServerVersion::Exchange2013_SP1 => "Exchange2013_SP1",
}
.into()
}
}
#[derive(Clone, Debug, Deserialize, XmlSerialize)]
pub struct ServerVersionInfo {
#[xml_struct(attribute)]
#[serde(rename = "@MajorVersion")]
pub major_version: Option<String>,
#[xml_struct(attribute)]
#[serde(rename = "@MinorVersion")]
pub minor_version: Option<String>,
#[xml_struct(attribute)]
#[serde(rename = "@MajorBuildNumber")]
pub major_build_number: Option<String>,
#[xml_struct(attribute)]
#[serde(rename = "@MinorBuildNumber")]
pub minor_build_number: Option<String>,
#[xml_struct(attribute)]
#[serde(rename = "@Version")]
pub version: Option<String>,
}