Skip to main content

bitwarden_policies/policies/
fill_assist.rs

1use bitwarden_organizations::OrganizationUserType;
2use serde::{Deserialize, Serialize};
3
4use crate::{Policy, PolicyType, policy_type::PolicyDataType};
5
6/// Fill Assist policy.
7pub struct FillAssistPolicy;
8
9impl Policy 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#[cfg_attr(
30    feature = "wasm",
31    derive(tsify::Tsify),
32    tsify(into_wasm_abi, from_wasm_abi)
33)]
34pub struct FillAssistPolicyData {
35    /// Overrides the default Fill Assist rules feed URL. Absent when the organization has
36    /// not configured a custom URL, in which case clients fall back to their server
37    /// configuration or the built-in default.
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub rules_url: Option<String>,
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn round_trips() {
48        let data = FillAssistPolicyData {
49            rules_url: Some("https://example.com/rules".to_string()),
50        };
51        let json = serde_json::to_string(&data).unwrap();
52        assert_eq!(json, r#"{"rulesUrl":"https://example.com/rules"}"#);
53        assert_eq!(
54            serde_json::from_str::<FillAssistPolicyData>(&json).unwrap(),
55            data
56        );
57    }
58
59    #[test]
60    fn empty_serializes_to_empty_object() {
61        assert_eq!(
62            serde_json::to_string(&FillAssistPolicyData::default()).unwrap(),
63            "{}"
64        );
65    }
66}