cognite/api/data_organization/
relationships.rs

1use serde::Serialize;
2
3use crate::api::resource::*;
4use crate::dto::{
5    data_organization::relationships::*,
6    items::{Cursor, ItemsVec},
7};
8use crate::error::Result;
9use crate::{CogniteExternalId, IdentityList, Patch};
10
11/// API resource for relationships.
12pub type RelationshipsResource = Resource<Relationship>;
13
14impl WithBasePath for RelationshipsResource {
15    const BASE_PATH: &'static str = "relationships";
16}
17
18impl Create<AddRelationship, Relationship> for RelationshipsResource {}
19impl Update<Patch<PatchRelationship>, Relationship> for RelationshipsResource {}
20impl<R> DeleteWithIgnoreUnknownIds<IdentityList<R>> for RelationshipsResource
21where
22    IdentityList<R>: Serialize,
23    R: Send + Sync,
24{
25}
26impl FilterWithRequest<FilterRelationshipsQuery, Relationship> for RelationshipsResource {}
27impl RetrieveWithRequest<RetrieveRelationshipsRequest, Relationship> for RelationshipsResource {}
28
29impl RelationshipsResource {
30    /// Retrieve a list of relationships by their ID.
31    ///
32    /// # Arguments
33    ///
34    /// * `relationship_ids` - IDs of relationships to retrieve.
35    /// * `ignore_unknown_ids` - Set this to `true` to ignore any IDs not found in CDF.
36    ///   If this is `false`, any missing IDs will cause the request to fail.
37    /// * `fetch_resources` - Whether to fetch the associated resources along with the relationship itself.
38    pub async fn retrieve(
39        &self,
40        relationship_ids: &[CogniteExternalId],
41        ignore_unknown_ids: bool,
42        fetch_resources: bool,
43    ) -> Result<Vec<Relationship>> {
44        let mut id_items = RetrieveRelationshipsRequest::from(relationship_ids);
45        id_items.fetch_resources = fetch_resources;
46        id_items.ignore_unknown_ids = ignore_unknown_ids;
47        let rel_response: ItemsVec<Relationship, Cursor> = self
48            .api_client
49            .post("relationships/byids", &id_items)
50            .await?;
51        Ok(rel_response.items)
52    }
53}