Skip to main content

bitwarden_policies/policies/
organization_data_ownership.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{PolicyDefinition, PolicyType, policy_type::PolicyDataType};
4
5/// Organization Data Ownership policy.
6pub struct OrganizationDataOwnershipPolicy;
7
8impl PolicyDefinition for OrganizationDataOwnershipPolicy {
9    type Data = OrganizationDataOwnershipPolicyData;
10
11    fn policy_type(&self) -> PolicyType {
12        PolicyType::OrganizationDataOwnership
13    }
14
15    fn to_erased(&self, data: Self::Data) -> PolicyDataType {
16        PolicyDataType::OrganizationDataOwnership(data)
17    }
18}
19
20/// Configuration data for the Organization Data Ownership policy.
21///
22/// Note: the client also sends a `defaultUserCollectionName` in the request
23/// metadata (not in the policy `data` blob), so it is intentionally not
24/// modeled here.
25#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
26#[serde(rename_all = "camelCase")]
27#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
28#[bitwarden_ffi::wasm_record]
29pub struct OrganizationDataOwnershipPolicyData {
30    /// Whether members may transfer individual items into their personal vault.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub enable_individual_items_transfer: Option<bool>,
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn round_trips() {
41        let data = OrganizationDataOwnershipPolicyData {
42            enable_individual_items_transfer: Some(true),
43        };
44        let json = serde_json::to_string(&data).unwrap();
45        assert_eq!(json, r#"{"enableIndividualItemsTransfer":true}"#);
46        assert_eq!(
47            serde_json::from_str::<OrganizationDataOwnershipPolicyData>(&json).unwrap(),
48            data
49        );
50    }
51
52    #[test]
53    fn empty_serializes_to_empty_object() {
54        assert_eq!(
55            serde_json::to_string(&OrganizationDataOwnershipPolicyData::default()).unwrap(),
56            "{}"
57        );
58    }
59}