Skip to main content

polyoxide_gamma/api/
comments.rs

1use polyoxide_core::{HttpClient, QueryBuilder, Request};
2
3use crate::{error::GammaError, types::Comment};
4
5/// Comments namespace for comment-related operations
6#[derive(Clone)]
7pub struct Comments {
8    pub(crate) http_client: HttpClient,
9}
10
11impl Comments {
12    /// List comments with optional filtering
13    pub fn list(&self) -> ListComments {
14        ListComments {
15            request: Request::new(self.http_client.clone(), "/comments"),
16        }
17    }
18}
19
20/// Request builder for listing comments
21pub struct ListComments {
22    request: Request<Vec<Comment>, GammaError>,
23}
24
25impl ListComments {
26    /// Set maximum number of results (minimum: 0)
27    pub fn limit(mut self, limit: u32) -> Self {
28        self.request = self.request.query("limit", limit);
29        self
30    }
31
32    /// Set pagination offset (minimum: 0)
33    pub fn offset(mut self, offset: u32) -> Self {
34        self.request = self.request.query("offset", offset);
35        self
36    }
37
38    /// Set order fields (comma-separated list)
39    pub fn order(mut self, order: impl Into<String>) -> Self {
40        self.request = self.request.query("order", order.into());
41        self
42    }
43
44    /// Set sort direction
45    pub fn ascending(mut self, ascending: bool) -> Self {
46        self.request = self.request.query("ascending", ascending);
47        self
48    }
49
50    /// Filter by parent entity type (Event, Series, market)
51    pub fn parent_entity_type(mut self, entity_type: impl Into<String>) -> Self {
52        self.request = self.request.query("parent_entity_type", entity_type.into());
53        self
54    }
55
56    /// Filter by parent entity ID
57    pub fn parent_entity_id(mut self, id: i64) -> Self {
58        self.request = self.request.query("parent_entity_id", id);
59        self
60    }
61
62    /// Include position data in response
63    pub fn get_positions(mut self, include: bool) -> Self {
64        self.request = self.request.query("get_positions", include);
65        self
66    }
67
68    /// Restrict results to position holders only
69    pub fn holders_only(mut self, holders_only: bool) -> Self {
70        self.request = self.request.query("holders_only", holders_only);
71        self
72    }
73
74    /// Execute the request
75    pub async fn send(self) -> Result<Vec<Comment>, GammaError> {
76        self.request.send().await
77    }
78}