tor_hsservice/pow/
v1_stub.rs1use std::marker::PhantomData;
4use std::sync::Arc;
5
6use futures::channel::mpsc;
7use serde::{Deserialize, Serialize};
8use tor_hscrypto::time::TimePeriod;
9use tor_keymgr::KeyMgr;
10use tor_persist::{
11 hsnickname::HsNickname,
12 state_dir::{InstanceRawSubdir, StorageHandle},
13};
14use tor_rtcompat::Runtime;
15
16use crate::{RendRequest, StartupError};
17
18use super::NewPowManager;
19
20#[derive(Clone)]
21pub(crate) struct PowManager<R> {
23 publisher_update_tx: mpsc::Sender<TimePeriod>,
25 runtime: PhantomData<R>,
27}
28
29#[derive(Serialize, Deserialize, Debug)]
30pub(crate) struct PowManagerStateRecord;
31
32impl<R: Runtime> PowManager<R> {
33 pub(crate) fn new(
34 _runtime: R,
35 _nickname: HsNickname,
36 _instance_dir: InstanceRawSubdir,
37 _keymgr: Arc<KeyMgr>,
38 _storage_handle: StorageHandle<PowManagerStateRecord>,
39 ) -> Result<NewPowManager<R>, StartupError> {
40 let (rend_req_tx, rend_req_rx) = super::make_rend_queue();
41 let (publisher_update_tx, publisher_update_rx) = mpsc::channel(1);
42
43 Ok(NewPowManager {
44 pow_manager: Arc::new(PowManager {
45 publisher_update_tx,
46 runtime: PhantomData,
47 }),
48 rend_req_tx,
49 rend_req_rx: Box::pin(rend_req_rx),
50 publisher_update_rx,
51 })
52 }
53
54 pub(crate) fn launch(self: Arc<Self>) -> Result<(), StartupError> {
55 Ok(())
56 }
57}