Skip to main content

canvas_lms_api/resources/
collaboration.rs

1use crate::{http::Requester, pagination::PageStream};
2use serde::{Deserialize, Serialize};
3use std::sync::Arc;
4
5/// A Canvas collaboration (Google Docs, Etherpad, etc.).
6#[derive(Debug, Clone, Deserialize, Serialize)]
7pub struct Collaboration {
8    pub id: u64,
9    pub collaboration_type: Option<String>,
10    pub document_id: Option<String>,
11    pub user_id: Option<u64>,
12    pub context_id: Option<u64>,
13    pub context_type: Option<String>,
14    pub url: Option<String>,
15    pub created_at: Option<chrono::DateTime<chrono::Utc>>,
16    pub updated_at: Option<chrono::DateTime<chrono::Utc>>,
17    pub description: Option<String>,
18    pub title: Option<String>,
19    pub user_name: Option<String>,
20
21    #[serde(skip)]
22    pub(crate) requester: Option<Arc<Requester>>,
23}
24
25impl Collaboration {
26    fn req(&self) -> &Arc<Requester> {
27        self.requester.as_ref().expect("requester not initialized")
28    }
29
30    /// List collaborators for this collaboration.
31    ///
32    /// # Canvas API
33    /// `GET /api/v1/collaborations/:id/members`
34    pub fn get_collaborators(&self) -> PageStream<Collaborator> {
35        PageStream::new(
36            Arc::clone(self.req()),
37            &format!("collaborations/{}/members", self.id),
38            vec![],
39        )
40    }
41}
42
43/// A user who is a member of a collaboration.
44#[derive(Debug, Clone, Deserialize, Serialize)]
45pub struct Collaborator {
46    pub id: u64,
47    #[serde(rename = "type")]
48    pub collaborator_type: Option<String>,
49    pub name: Option<String>,
50}