Skip to main content

chio_store_sqlite/
budget_store.rs

1use std::fs;
2use std::path::Path;
3use std::sync::{Arc, Mutex, MutexGuard};
4use std::time::{SystemTime, UNIX_EPOCH};
5
6use chio_core::capability::scope::MonetaryAmount;
7use chio_kernel::budget_store::{
8    ApprovalRequiredBudgetHold, AuthorizedBudgetHold, BudgetAdmissionBinding,
9    BudgetAuthorizationOutcome, BudgetAuthorizeCumulativeApprovalRequest,
10    BudgetAuthorizeHoldDecision, BudgetAuthorizeHoldRequest,
11    BudgetCancelCapturedBeforeDispatchRequest, BudgetCaptureHoldDecision, BudgetCaptureHoldRequest,
12    BudgetCaptureInvocationRequest, BudgetCapturedBeforeDispatchCancellationDecision,
13    BudgetCommitMetadata, BudgetCumulativeApprovalAccountKey, BudgetCumulativeApprovalAccountUsage,
14    BudgetCumulativeApprovalAuthorizationDecision, BudgetCumulativeApprovalMutation,
15    BudgetCumulativeApprovalRequest, BudgetCumulativeApprovalState, BudgetCumulativeApprovalUsage,
16    BudgetEventAuthority, BudgetGuaranteeLevel, BudgetHoldDispositionView,
17    BudgetHoldMutationDecision, BudgetHoldSnapshot, BudgetInvocationCaptureDecision,
18    BudgetInvocationQuota, BudgetInvocationQuotaMutation, BudgetInvocationQuotaUsage,
19    BudgetInvocationState, BudgetMonetaryState, BudgetMutationKind, BudgetMutationRecord,
20    BudgetQuotaKey, BudgetQuotaProfile, BudgetReconcileHoldDecision, BudgetReconcileHoldRequest,
21    BudgetReleaseHoldDecision, BudgetReleaseHoldRequest, BudgetReverseHoldDecision,
22    BudgetReverseHoldRequest, DeniedBudgetHold, ReservedHoldEnvelope, RevocationCommitMetadata,
23};
24use chio_kernel::payment::{
25    PaymentJournalRecord, PaymentJournalState, PaymentJournalTransition, PaymentRailMode,
26    PaymentReleaseAuthorityBinding, PaymentReleaseAuthorityKind, PaymentSettleAction,
27};
28use chio_kernel::tool_outcome::{MonetaryReleaseEvidenceKindV1, MonetaryReleaseEvidenceV1};
29use chio_kernel::{BudgetStore, BudgetStoreError, BudgetUsageRecord, CanonicalRevocationSet};
30use rusqlite::{params, Connection, OptionalExtension, TransactionBehavior};
31
32mod authorization;
33mod composite;
34pub(crate) use composite::{AdmissionAuthorizationBinding, AdmissionCaptureBinding};
35pub(crate) mod composite_schema;
36mod import_hold_state;
37mod import_validation;
38mod joint_guard;
39mod model;
40mod payment_journal;
41pub(crate) use payment_journal::{
42    advance_payment_journal, insert_payment_journal, load_payment_journal,
43};
44mod reaper;
45mod replication;
46mod rows;
47mod schema;
48mod snapshot;
49mod store;
50mod trait_impl;
51
52pub use reaper::ReapSummary;
53pub use snapshot::{
54    budget_snapshot_anchor_authenticator, budget_snapshot_anchor_chain_digest,
55    budget_snapshot_anchor_set_digest, BudgetSnapshotAnchorCommitment,
56    BudgetSnapshotAnchorProvenance, BudgetStoreSnapshot, SignedBudgetSnapshotAnchorCommitment,
57};
58pub(crate) use store::BUDGET_STORE_SUPPORTED_SCHEMA_VERSION;
59
60#[cfg(test)]
61#[path = "budget_store/tests.rs"]
62#[allow(clippy::expect_used, clippy::unwrap_used)]
63mod tests;
64
65use composite_schema::*;
66use model::{HoldDisposition, SqliteBudgetHold};
67use replication::*;
68use rows::*;
69use schema::*;
70
71#[derive(Clone)]
72pub struct SqliteBudgetStore {
73    connection: Arc<Mutex<Connection>>,
74    serving_owner: Option<Arc<crate::serving_owner::SqliteServingOwner>>,
75}