tor_netdoc/doc/hsdesc/pow/
v1.rs1use crate::doc::hsdesc::inner::HsInnerKwd;
4use crate::parse::{keyword::Keyword, tokenize::Item};
5use crate::types::misc::{B64, Iso8601TimeNoSp};
6use crate::{NetdocErrorKind, Result};
7use std::time::SystemTime;
8use tor_checkable::timed::TimerangeBound;
9use tor_hscrypto::pow::v1::{Effort, Seed};
10
11#[derive(Debug, Clone, derive_more::Constructor, amplify::Getters)]
21pub struct PowParamsV1 {
22 #[getter(as_ref)]
24 seed: TimerangeBound<Seed>,
25 #[getter(as_copy)]
30 suggested_effort: Effort,
31}
32
33impl PowParamsV1 {
34 pub(super) fn from_item(item: &Item<'_, HsInnerKwd>) -> Result<Self> {
36 if item.has_obj() {
37 return Err(NetdocErrorKind::UnexpectedObject
38 .with_msg(item.kwd().to_str())
39 .at_pos(item.pos()));
40 }
41 let seed = item.required_arg(1)?.parse::<B64>()?.into_array()?.into();
42 let suggested_effort = item.required_arg(2)?.parse::<u32>()?.into();
43 let expires: SystemTime = item.required_arg(3)?.parse::<Iso8601TimeNoSp>()?.into();
44 Ok(Self {
45 seed: TimerangeBound::new(seed, ..expires),
46 suggested_effort,
47 })
48 }
49}