use crate::domain::ids::{AzureResourceId, DatabaseId, RoleName}; use crate::error::SafeError; #[derive(Debug, Clone)] pub struct DesiredPrivilegeProfile { pub role: RoleName, pub databases: Vec, } #[derive(Debug, Clone)] pub enum PrivilegeScope { Database, Schema(String), Table { schema: String, table: String }, Sequence { schema: String, sequence: String }, Function { schema: String, function: String }, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum PrivilegeKind { Connect, Usage, Create, Select, Insert, Update, Delete, Truncate, References, Trigger, Execute, } #[derive(Debug, Clone)] pub struct RoleMembershipIntent { pub role: RoleName, pub grantable: bool, } #[derive(Debug, Clone)] pub enum Grantability { Grantable, NotGrantable(&'static str), } #[derive(Debug, Clone)] pub struct PlanOperation { pub scope: PrivilegeScope, pub privilege: PrivilegeKind, } #[derive(Debug, Clone)] pub struct DatabasePermissionPlan { pub database: DatabaseId, pub operations: Vec, } #[derive(Debug, Clone)] pub struct PermissionPlan { pub target_server: AzureResourceId, pub target_role: RoleName, pub databases: Vec, pub memberships: Vec, pub password_will_be_set: bool, } #[derive(Debug, Clone)] pub enum PlanStepResult { Succeeded, Failed(SafeError), Skipped(&'static str), } #[derive(Debug, Clone)] pub struct PlanResult { pub database: Option, pub steps: Vec, }