collaboflow_rs/client/document/
document_contents.rs1use crate::authorization::HEADER_KEY;
2use crate::client::document::RESOURCE_V1_DOCUMENTS;
3use crate::response::document::document_contents::{
4 GetDocumentContentsResponse, GetDocumentContentsResponseBody,
5};
6use crate::response::error::{ErrorResponse, ErrorResponseBody};
7use crate::Query;
8
9const NESTED_RESOURCE: &str = "contents";
10
11#[derive(Debug, Clone)]
12pub struct DocumentContents {
13 url: String,
14 authorization_header: String,
15}
16
17impl DocumentContents {
18 pub fn new(url: &str, authorization_header: &str) -> Self {
19 Self {
20 url: url.to_string() + RESOURCE_V1_DOCUMENTS,
21 authorization_header: authorization_header.to_string(),
22 }
23 }
24
25 pub async fn get(
26 &self,
27 document_id: i32,
28 query: Query,
29 ) -> Result<GetDocumentContentsResponse, ErrorResponse> {
30 let request_url = format!("{}/{}/{}", &self.url, document_id, NESTED_RESOURCE,);
31
32 let http_client = reqwest::Client::new();
33 let result = http_client
34 .get(request_url)
35 .query(&query.to_queries())
36 .header(HEADER_KEY, &self.authorization_header)
37 .send()
38 .await;
39
40 match result {
41 Ok(resp) => {
42 let status = resp.status().as_u16();
43
44 if status == 200 {
45 match resp.json::<GetDocumentContentsResponseBody>().await {
46 Ok(body) => Ok(GetDocumentContentsResponse { status, body }),
47 Err(err) => {
48 let body = ErrorResponseBody {
49 error: true,
50 messages: vec![err.to_string()],
51 };
52 let error_response = ErrorResponse { status, body };
53 Err(error_response)
54 }
55 }
56 } else {
57 match resp.json::<ErrorResponseBody>().await {
58 Ok(body) => {
59 let error_response = ErrorResponse { status, body };
60 Err(error_response)
61 }
62 Err(err) => {
63 let body = ErrorResponseBody {
64 error: true,
65 messages: vec![err.to_string()],
66 };
67 let error_response = ErrorResponse { status, body };
68 Err(error_response)
69 }
70 }
71 }
72 }
73 Err(err) => {
74 let body = ErrorResponseBody {
75 error: true,
76 messages: vec![err.to_string()],
77 };
78 let error_response = ErrorResponse { status: 500, body };
79 Err(error_response)
80 }
81 }
82 }
83}