openstack_keystone_api_types/
scope.rs1use derive_builder::Builder;
16use serde::{Deserialize, Serialize};
17use utoipa::ToSchema;
18use validator::{Validate, ValidationErrors};
19
20use crate::error::BuilderError;
21
22#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, ToSchema)]
32#[serde(rename_all = "lowercase")]
33pub enum Scope {
34 Project(ScopeProject),
36 Domain(Domain),
38 System(System),
40}
41
42impl Validate for Scope {
43 fn validate(&self) -> Result<(), ValidationErrors> {
44 match self {
45 Self::Project(project) => project.validate(),
46 Self::Domain(domain) => domain.validate(),
47 Self::System(system) => system.validate(),
48 }
49 }
50}
51
52#[derive(Builder, Clone, Debug, Default, Deserialize, PartialEq, Serialize, ToSchema, Validate)]
54#[builder(build_fn(error = "BuilderError"))]
55#[builder(setter(into, strip_option))]
56pub struct ScopeProject {
57 #[builder(default)]
59 #[validate(length(max = 64))]
60 pub id: Option<String>,
61 #[builder(default)]
63 #[validate(length(max = 64))]
64 pub name: Option<String>,
65 #[builder(default)]
67 pub domain: Option<Domain>,
68}
69
70#[derive(Builder, Clone, Debug, Default, Deserialize, PartialEq, Serialize, ToSchema, Validate)]
72#[builder(build_fn(error = "BuilderError"))]
73#[builder(setter(into, strip_option))]
74pub struct Domain {
75 #[builder(default)]
77 #[validate(length(max = 64))]
78 pub id: Option<String>,
79 #[builder(default)]
81 #[validate(length(max = 64))]
82 pub name: Option<String>,
83}
84
85#[derive(Builder, Clone, Debug, Default, Deserialize, PartialEq, Serialize, ToSchema, Validate)]
87#[builder(build_fn(error = "BuilderError"))]
88pub struct Project {
89 #[validate(length(max = 64))]
91 pub id: String,
92 #[builder(default)]
94 #[validate(length(max = 64))]
95 pub name: String,
96 pub domain: Domain,
98}
99
100#[derive(Builder, Clone, Debug, Default, Deserialize, PartialEq, Serialize, ToSchema, Validate)]
102#[builder(build_fn(error = "BuilderError"))]
103#[builder(setter(into, strip_option))]
104pub struct System {
105 #[builder(default)]
107 pub all: Option<bool>,
108}