Skip to content
This repository was archived by the owner on Feb 4, 2025. It is now read-only.

Const role #23

Merged
merged 13 commits into from
Nov 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .tarpaulin.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
exclude-files = [
"crates/rules-uniffi/src/unneeded_when_moved_to_sargon.rs",
"crates/rules-uniffi/src/error_conversion.rs",
"crates/rules/src/move_to_sargon.rs",
]
verbose = false
force-clean = true
Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"Appendable",
"Banksy",
"bdfs",
"fsid",
"Fulfillable",
"interactor",
"Interactors",
Expand Down
7 changes: 6 additions & 1 deletion crates/rules/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,13 @@ edition = "2021"

[dependencies]
thiserror = { workspace = true }
sargon = { workspace = true}
sargon = { workspace = true }
serde = { version = "1.0.215", features = ["derive"] }
pretty_assertions = "1.4.1"
serde_json = { version = "1.0.133", features = ["preserve_order"] }
assert-json-diff = "2.0.2"
once_cell = "1.20.2"
itertools = "0.13.0"

[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ["cfg(tarpaulin_include)"] }
15 changes: 11 additions & 4 deletions crates/rules/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]

mod matrices;
mod move_to_sargon;
mod roles;
mod security_structure_of_factors;

pub mod prelude {
pub(crate) use sargon::{
BaseIsFactorSource, CommonError, DisplayName, FactorInstance, FactorInstances,
FactorSource, FactorSourceID, FactorSourceIDFromHash, FactorSourceKind, FactorSources,
HasSampleValues, HierarchicalDeterministicFactorInstance, Identifiable, IndexMap, IndexSet,
IsMaybeKeySpaceAware, KeySpace, RoleKind,
BIP39Passphrase, BaseIsFactorSource, CommonError, DerivationPreset, DisplayName,
FactorInstance, FactorInstances, FactorSource, FactorSourceID, FactorSourceIDFromHash,
FactorSourceKind, FactorSources, HasRoleKindObjectSafe, HasSampleValues,
HierarchicalDeterministicFactorInstance, Identifiable, IndexMap, IndexSet,
IsMaybeKeySpaceAware, IsSecurityStateAware, KeySpace, Mnemonic, MnemonicWithPassphrase,
RoleKind,
};

pub(crate) use itertools::*;

#[cfg(test)]
pub(crate) use sargon::JustKV;

Expand Down
21 changes: 18 additions & 3 deletions crates/rules/src/matrices/abstract_matrix_builder_or_built.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
use crate::prelude::*;

#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AbstractMatrixBuilderOrBuilt<F, T, U> {
#[serde(skip)]
#[doc(hidden)]
pub(crate) built: PhantomData<T>,

pub(crate) primary_role: AbstractRoleBuilderOrBuilt<F, U>,
pub(crate) recovery_role: AbstractRoleBuilderOrBuilt<F, U>,
pub(crate) confirmation_role: AbstractRoleBuilderOrBuilt<F, U>,
pub(crate) primary_role: AbstractRoleBuilderOrBuilt<{ ROLE_PRIMARY }, F, U>,
pub(crate) recovery_role: AbstractRoleBuilderOrBuilt<{ ROLE_RECOVERY }, F, U>,
pub(crate) confirmation_role: AbstractRoleBuilderOrBuilt<{ ROLE_CONFIRMATION }, F, U>,

pub(crate) number_of_days_until_auto_confirm: u16,
}
Expand All @@ -18,6 +19,20 @@ impl<F, T, U> AbstractMatrixBuilderOrBuilt<F, T, U> {

pub type AbstractMatrixBuilt<F> = AbstractMatrixBuilderOrBuilt<F, (), ()>;

impl<F> AbstractMatrixBuilt<F> {
pub fn primary(&self) -> &AbstractBuiltRoleWithFactor<{ ROLE_PRIMARY }, F> {
&self.primary_role
}

pub fn recovery(&self) -> &AbstractBuiltRoleWithFactor<{ ROLE_RECOVERY }, F> {
&self.recovery_role
}

pub fn confirmation(&self) -> &AbstractBuiltRoleWithFactor<{ ROLE_CONFIRMATION }, F> {
&self.confirmation_role
}
}

impl<F: std::cmp::Eq + std::hash::Hash> AbstractMatrixBuilt<F> {
pub fn all_factors(&self) -> HashSet<&F> {
let mut factors = HashSet::new();
Expand Down
44 changes: 19 additions & 25 deletions crates/rules/src/matrices/builder/matrix_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@ use crate::prelude::*;
pub type MatrixBuilderMutateResult = Result<(), MatrixBuilderValidation>;
pub type MatrixBuilderBuildResult = Result<MatrixOfFactorSourceIds, MatrixBuilderValidation>;

pub type MatrixBuilder =
AbstractMatrixBuilderOrBuilt<FactorSourceID, MatrixOfFactorSourceIds, RoleWithFactorSourceIds>;
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Built;

pub type MatrixBuilder = AbstractMatrixBuilderOrBuilt<
FactorSourceID,
MatrixOfFactorSourceIds,
Built, // this is HACKY
>;

// ==================
// ===== PUBLIC =====
Expand All @@ -15,9 +21,9 @@ impl MatrixBuilder {
pub fn new() -> Self {
Self {
built: PhantomData,
primary_role: RoleBuilder::primary(),
recovery_role: RoleBuilder::recovery(),
confirmation_role: RoleBuilder::confirmation(),
primary_role: PrimaryRoleBuilder::new(),
recovery_role: RecoveryRoleBuilder::new(),
confirmation_role: ConfirmationRoleBuilder::new(),
number_of_days_until_auto_confirm: Self::DEFAULT_NUMBER_OF_DAYS_UNTIL_AUTO_CONFIRM,
}
}
Expand Down Expand Up @@ -53,21 +59,15 @@ impl MatrixBuilder {
factor_source_kind: FactorSourceKind,
) -> RoleBuilderMutateResult {
self.primary_role
.validation_for_addition_of_factor_source_of_kind_to_list(
factor_source_kind,
FactorListKind::Threshold,
)
.validation_for_addition_of_factor_source_of_kind_to_threshold(factor_source_kind)
}

pub fn validation_for_addition_of_factor_source_of_kind_to_primary_override(
&self,
factor_source_kind: FactorSourceKind,
) -> RoleBuilderMutateResult {
self.primary_role
.validation_for_addition_of_factor_source_of_kind_to_list(
factor_source_kind,
FactorListKind::Override,
)
.validation_for_addition_of_factor_source_of_kind_to_override(factor_source_kind)
}

pub fn validation_for_addition_of_factor_source_to_primary_threshold_for_each(
Expand Down Expand Up @@ -97,10 +97,7 @@ impl MatrixBuilder {
factor_source_kind: FactorSourceKind,
) -> RoleBuilderMutateResult {
self.recovery_role
.validation_for_addition_of_factor_source_of_kind_to_list(
factor_source_kind,
FactorListKind::Override,
)
.validation_for_addition_of_factor_source_of_kind_to_override(factor_source_kind)
}

pub fn validation_for_addition_of_factor_source_to_recovery_override_for_each(
Expand All @@ -119,10 +116,7 @@ impl MatrixBuilder {
factor_source_kind: FactorSourceKind,
) -> RoleBuilderMutateResult {
self.confirmation_role
.validation_for_addition_of_factor_source_of_kind_to_list(
factor_source_kind,
FactorListKind::Override,
)
.validation_for_addition_of_factor_source_of_kind_to_override(factor_source_kind)
}

pub fn validation_for_addition_of_factor_source_to_confirmation_override_for_each(
Expand Down Expand Up @@ -161,7 +155,7 @@ impl MatrixBuilder {
factor_source_id: FactorSourceID,
) -> MatrixBuilderMutateResult {
self.primary_role
.add_factor_source_to_list(factor_source_id, FactorListKind::Threshold)
.add_factor_source_to_threshold(factor_source_id)
.into_matrix_err(RoleKind::Primary)
}

Expand All @@ -171,7 +165,7 @@ impl MatrixBuilder {
factor_source_id: FactorSourceID,
) -> MatrixBuilderMutateResult {
self.primary_role
.add_factor_source_to_list(factor_source_id, FactorListKind::Override)
.add_factor_source_to_override(factor_source_id)
.into_matrix_err(RoleKind::Primary)
}

Expand All @@ -180,7 +174,7 @@ impl MatrixBuilder {
factor_source_id: FactorSourceID,
) -> MatrixBuilderMutateResult {
self.recovery_role
.add_factor_source_to_list(factor_source_id, FactorListKind::Override)
.add_factor_source_to_override(factor_source_id)
.into_matrix_err(RoleKind::Recovery)
}

Expand All @@ -189,7 +183,7 @@ impl MatrixBuilder {
factor_source_id: FactorSourceID,
) -> MatrixBuilderMutateResult {
self.confirmation_role
.add_factor_source_to_list(factor_source_id, FactorListKind::Override)
.add_factor_source_to_override(factor_source_id)
.into_matrix_err(RoleKind::Confirmation)
}

Expand Down
Loading
Loading