Skip to main content

bitwarden_policies/policies/
fill_assist.rs

1use bitwarden_organizations::OrganizationUserType;
2use serde::{Deserialize, Serialize};
3
4use crate::{PolicyDefinition, PolicyType, policy_type::PolicyDataType};
5
6/// Fill Assist policy.
7pub struct FillAssistPolicy;
8
9impl PolicyDefinition for FillAssistPolicy {
10    type Data = FillAssistPolicyData;
11
12    fn policy_type(&self) -> PolicyType {
13        PolicyType::FillAssist
14    }
15
16    fn exempt_roles(&self) -> &[OrganizationUserType] {
17        &[]
18    }
19
20    fn to_erased(&self, data: Self::Data) -> PolicyDataType {
21        PolicyDataType::FillAssist(data)
22    }
23}
24
25/// Configuration data for the Fill Assist policy.
26#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
27#[serde(rename_all = "camelCase")]
28#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
29#[bitwarden_ffi::wasm_record]
30pub struct FillAssistPolicyData {
31    /// Overrides the default Fill Assist rules feed URL. Absent when the organization has
32    /// not configured a custom URL, in which case clients fall back to their server
33    /// configuration or the built-in default.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub rules_url: Option<String>,
36}
37
38#[cfg(test)]
39mod tests {
40    use super::*;
41
42    #[test]
43    fn round_trips() {
44        let data = FillAssistPolicyData {
45            rules_url: Some("https://example.com/rules".to_string()),
46        };
47        let json = serde_json::to_string(&data).unwrap();
48        assert_eq!(json, r#"{"rulesUrl":"https://example.com/rules"}"#);
49        assert_eq!(
50            serde_json::from_str::<FillAssistPolicyData>(&json).unwrap(),
51            data
52        );
53    }
54
55    #[test]
56    fn empty_serializes_to_empty_object() {
57        assert_eq!(
58            serde_json::to_string(&FillAssistPolicyData::default()).unwrap(),
59            "{}"
60        );
61    }
62}