powerplatform_dataverse_service_client/
action.rs

1use serde::{Serialize, ser::SerializeMap};
2use uuid::Uuid;
3
4/// Represents a request to execute the Merge action in Dataverse
5#[derive(Debug, Serialize)]
6pub struct MergeRequest<'a> {
7    #[serde(rename = "Target")]
8    pub target: EntityReference<'a>,
9    #[serde(rename = "Subordinate")]
10    pub subordinate: EntityReference<'a>,
11    #[serde(rename = "PerformParentingChecks")]
12    pub check_parents: bool,
13}
14
15impl<'a> MergeRequest<'a> {
16    pub fn new(entity_name: &'a str, target: Uuid, subordinate: Uuid, check_parents: bool) -> Self {
17        Self {
18            target: EntityReference {
19                entity_name,
20                entity_id: target,
21            },
22            subordinate: EntityReference {
23                entity_name,
24                entity_id: subordinate,
25            },
26            check_parents
27        }
28    }
29}
30
31#[derive(Debug)]
32pub struct EntityReference<'a> {
33    pub entity_name: &'a str,
34    pub entity_id: Uuid,
35}
36
37impl<'a> Serialize for EntityReference<'a> {
38    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
39    where S: serde::Serializer {
40        let mut map = serializer.serialize_map(Some(2))?;
41        map.serialize_entry("@odata.type", &format!("Microsoft.Dynamics.CRM.{}", self.entity_name))?;
42        map.serialize_entry(&format!("{}id", self.entity_id), self.entity_id.as_hyphenated())?;
43        map.end()
44    }
45}