Skip to main content

bitwarden_policies/policies/
organization_data_ownership.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{Policy, PolicyType, policy_type::PolicyDataType};
4
5/// Organization Data Ownership policy.
6pub struct OrganizationDataOwnershipPolicy;
7
8impl Policy 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#[cfg_attr(
29    feature = "wasm",
30    derive(tsify::Tsify),
31    tsify(into_wasm_abi, from_wasm_abi)
32)]
33pub struct OrganizationDataOwnershipPolicyData {
34    /// Whether members may transfer individual items into their personal vault.
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub enable_individual_items_transfer: Option<bool>,
37}
38
39#[cfg(test)]
40mod tests {
41    use super::*;
42
43    #[test]
44    fn round_trips() {
45        let data = OrganizationDataOwnershipPolicyData {
46            enable_individual_items_transfer: Some(true),
47        };
48        let json = serde_json::to_string(&data).unwrap();
49        assert_eq!(json, r#"{"enableIndividualItemsTransfer":true}"#);
50        assert_eq!(
51            serde_json::from_str::<OrganizationDataOwnershipPolicyData>(&json).unwrap(),
52            data
53        );
54    }
55
56    #[test]
57    fn empty_serializes_to_empty_object() {
58        assert_eq!(
59            serde_json::to_string(&OrganizationDataOwnershipPolicyData::default()).unwrap(),
60            "{}"
61        );
62    }
63}