use super::*;
ns_choose! { (
use NotPresentEachValue as doc_digest_item_m;
) (
) (
use RouterStatusMdDigestsVote as doc_digest_item_m;
) }
type DocDigestB64 = FixedB64<DOC_DIGEST_LEN>;
#[derive(Debug, Clone, Deftly)]
#[derive_deftly(ItemValueParseable)]
#[non_exhaustive]
pub struct RouterStatusIntroItem {
pub nickname: Nickname,
pub identity: Base64Fingerprint,
pub doc_digest: ns_type!(DocDigestB64, NotPresent, DocDigestB64),
pub publication: ns_type!(
IgnoredPublicationTimeSp,
IgnoredPublicationTimeSp,
Iso8601TimeSp
),
pub ip: std::net::Ipv4Addr,
pub or_port: u16,
}
#[derive(Debug, Clone, Deftly)]
#[derive_deftly(NetdocParseable)]
#[non_exhaustive]
pub struct RouterStatus {
pub r: RouterStatusIntroItem,
#[deftly(netdoc(with = doc_digest_item_m))]
pub m: ns_type!(NotPresent, DocDigestB64, Vec<RouterStatusMdDigestsVote>),
#[deftly(netdoc(single_arg))]
pub a: Vec<net::SocketAddr>,
#[deftly(netdoc(
keyword = "s",
with = {
relay_flags::ParserEncoder::<ns_type!(
relay_flags::ConsensusRepr,
relay_flags::ConsensusRepr,
relay_flags::NoImplicitRepr,
)>
},
))]
pub flags: DocRelayFlags,
#[deftly(netdoc(keyword = "v"))]
pub version: Option<SoftwareVersion>,
#[deftly(netdoc(keyword = "pr"))]
pub protos: Protocols,
#[deftly(netdoc(flatten))]
pub weight: RelayWeightsItem,
}
impl RouterStatus {
pub fn doc_digest(&self) -> &DocDigest {
ns_expr!(&self.r.doc_digest, &self.m, &self.r.doc_digest,)
}
}