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)]
#[cfg_attr(feature = "incomplete", derive_deftly(ItemValueEncodable))] #[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,
pub dir_port: u16,
}
#[derive(Debug, Clone, Deftly)]
#[derive_deftly(NetdocParseable)]
#[cfg_attr(feature = "incomplete", derive_deftly(NetdocEncodable))] #[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,
#[deftly(netdoc(keyword = "p"))]
pub port_policy: ns_type!(Option<Arc<PortPolicy>>, NotPresent, Option<Arc<PortPolicy>>),
#[deftly(netdoc(keyword = "id"))]
pub ed25519_id: ns_type!(NotPresent, NotPresent, Ed25519IdentityLine),
pub stats: ns_type!(NotPresent, NotPresent, NetParams<F64Finite>),
}
impl RouterStatus {
pub fn doc_digest(&self) -> &DocDigest {
ns_expr!(&self.r.doc_digest, &self.m, &self.r.doc_digest,)
}
}
impl EncodeOrd for RouterStatus {
fn encode_cmp(&self, other: &Self) -> Ordering {
let k: for <'i> fn(&'i RouterStatus) -> &'i _ = |rs| &rs .r.identity;
EncodeOrd::encode_cmp(k(self), k(other))
}
}