use crate::doc::hsdesc::inner::HsInnerKwd;
use crate::parse::tokenize::Item;
use crate::types::misc::{B64, Iso8601TimeNoSp};
use crate::{KeywordEncodable, NetdocErrorKind, Result};
use std::time::SystemTime;
use tor_checkable::timed::TimerangeBound;
use tor_hscrypto::pow::v1::{Effort, Seed};
#[derive(Debug, Clone, derive_more::Constructor, amplify::Getters)]
pub struct PowParamsV1 {
#[getter(as_ref)]
seed: TimerangeBound<Seed>,
#[getter(as_copy)]
suggested_effort: Effort,
}
impl PowParamsV1 {
pub(super) fn from_item(item: &Item<'_, HsInnerKwd>) -> Result<Self> {
if item.has_obj() {
return Err(NetdocErrorKind::UnexpectedObject
.with_msg(item.kwd().to_str())
.at_pos(item.pos()));
}
let seed = item.required_arg(1)?.parse::<B64>()?.into_array()?.into();
let suggested_effort = item.required_arg(2)?.parse::<u32>()?.into();
let expires: SystemTime = item.required_arg(3)?.parse::<Iso8601TimeNoSp>()?.into();
Ok(Self {
seed: TimerangeBound::new(seed, ..expires),
suggested_effort,
})
}
}