use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum PermissionType {
ProtocolPermission,
BasketAccess,
CertificateAccess,
SpendingAuthorization,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionToken {
pub txid: String,
pub tx: Option<Vec<u8>>,
pub output_index: u32,
pub output_script: Vec<u8>,
pub satoshis: u64,
pub originator: String,
pub raw_originator: Option<String>,
pub expiry: Option<u64>,
pub privileged: Option<bool>,
pub protocol: Option<String>,
pub security_level: Option<u8>,
pub counterparty: Option<String>,
pub basket_name: Option<String>,
pub cert_type: Option<String>,
pub cert_fields: Option<String>,
pub verifier: Option<String>,
pub authorized_amount: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequest {
pub permission_type: PermissionType,
pub originator: String,
pub privileged: Option<bool>,
pub protocol: Option<String>,
pub security_level: Option<u8>,
pub counterparty: Option<String>,
pub basket_name: Option<String>,
pub cert_type: Option<String>,
pub cert_fields: Option<Vec<String>>,
pub verifier: Option<String>,
pub amount: Option<u64>,
pub description: Option<String>,
pub labels: Option<Vec<String>>,
pub is_new_user: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum PermissionResponse {
Grant {
expiry: Option<u64>,
},
Deny {
reason: String,
},
EphemeralGrant,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GroupedPermissions {
pub protocol_permissions: Vec<PermissionRequest>,
pub basket_access: Vec<PermissionRequest>,
pub certificate_access: Vec<PermissionRequest>,
pub spending_authorization: Option<PermissionRequest>,
}
pub const BASKET_DPACP: &str = "admin protocol-permission";
pub const BASKET_DBAP: &str = "admin basket-access";
pub const BASKET_DCAP: &str = "admin certificate-access";
pub const BASKET_DSAP: &str = "admin spending-authorization";
pub const TAG_PREFIX_PROTOCOL: &str = "perm-proto:";
pub const TAG_PREFIX_BASKET: &str = "perm-basket:";
pub const TAG_PREFIX_CERTIFICATE: &str = "perm-cert:";
pub const TAG_PREFIX_SPENDING: &str = "perm-spend:";
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_permission_type_equality() {
assert_eq!(
PermissionType::ProtocolPermission,
PermissionType::ProtocolPermission
);
assert_ne!(
PermissionType::ProtocolPermission,
PermissionType::BasketAccess
);
assert_ne!(
PermissionType::CertificateAccess,
PermissionType::SpendingAuthorization
);
let a = PermissionType::BasketAccess;
let b = a;
assert_eq!(a, b);
}
}