aranya_client/config/team/
quic_sync.rs1use aranya_daemon_api::{AddSeedMode, CreateSeedMode, SEED_IKM_SIZE};
10use tracing::error;
11
12use crate::{error::InvalidArg, ConfigError, Result};
13
14#[derive(Clone, Debug)]
16pub struct CreateTeamQuicSyncConfig {
17 mode: CreateSeedMode,
18}
19
20impl CreateTeamQuicSyncConfig {
21 pub fn builder() -> CreateTeamQuicSyncConfigBuilder {
23 CreateTeamQuicSyncConfigBuilder::default()
24 }
25}
26
27#[derive(Clone, Debug)]
29pub struct AddTeamQuicSyncConfig {
30 mode: AddSeedMode,
31}
32
33impl AddTeamQuicSyncConfig {
34 pub fn builder() -> AddTeamQuicSyncConfigBuilder {
36 AddTeamQuicSyncConfigBuilder::default()
37 }
38}
39
40#[derive(Debug, Default)]
42pub struct CreateTeamQuicSyncConfigBuilder {
43 mode: CreateSeedMode,
44}
45
46impl CreateTeamQuicSyncConfigBuilder {
47 #[doc(hidden)]
49 pub fn mode(mut self, mode: CreateSeedMode) -> Self {
50 self.mode = mode;
51 self
52 }
53
54 pub fn gen_seed(mut self) -> Self {
58 self.mode = CreateSeedMode::Generate;
59 self
60 }
61
62 pub fn seed_ikm(mut self, ikm: [u8; SEED_IKM_SIZE]) -> Self {
66 self.mode = CreateSeedMode::IKM(ikm.into());
67 self
68 }
69
70 pub fn build(self) -> Result<CreateTeamQuicSyncConfig> {
72 Ok(CreateTeamQuicSyncConfig { mode: self.mode })
73 }
74}
75
76#[derive(Debug, Default)]
78pub struct AddTeamQuicSyncConfigBuilder {
79 mode: Option<AddSeedMode>,
80}
81
82impl AddTeamQuicSyncConfigBuilder {
83 #[doc(hidden)]
85 pub fn mode(mut self, mode: AddSeedMode) -> Self {
86 self.mode = Some(mode);
87 self
88 }
89
90 pub fn seed_ikm(mut self, ikm: [u8; SEED_IKM_SIZE]) -> Self {
94 self.mode = Some(AddSeedMode::IKM(ikm.into()));
95 self
96 }
97
98 pub fn wrapped_seed(mut self, wrapped_seed: &[u8]) -> Result<Self> {
102 let wrapped = postcard::from_bytes(wrapped_seed).map_err(|err| {
103 error!(error = %err, "could not deserialize wrapped_seed");
104 ConfigError::InvalidArg(InvalidArg::new("wrapped_seed", "could not deserialize"))
105 })?;
106 self.mode = Some(AddSeedMode::Wrapped(wrapped));
107 Ok(self)
108 }
109
110 pub fn build(self) -> Result<AddTeamQuicSyncConfig> {
112 let Some(mode) = self.mode else {
113 return Err(ConfigError::InvalidArg(InvalidArg::new(
114 "mode",
115 "`mode` must be set in order to build an `AddQuicSyncConfig`",
116 ))
117 .into());
118 };
119
120 Ok(AddTeamQuicSyncConfig { mode })
121 }
122}
123
124impl From<CreateTeamQuicSyncConfig> for aranya_daemon_api::CreateTeamQuicSyncConfig {
125 fn from(value: CreateTeamQuicSyncConfig) -> Self {
126 aranya_daemon_api::CreateTeamQuicSyncConfig {
127 seed_mode: value.mode,
128 }
129 }
130}
131
132impl From<AddTeamQuicSyncConfig> for aranya_daemon_api::AddTeamQuicSyncConfig {
133 fn from(value: AddTeamQuicSyncConfig) -> Self {
134 aranya_daemon_api::AddTeamQuicSyncConfig {
135 seed_mode: value.mode,
136 }
137 }
138}