gitea_sdk_rs/options/
notification.rs1use crate::pagination::ListOptions;
8use crate::types::enums::{NotifyStatus, NotifySubjectType};
9use time::OffsetDateTime;
10
11#[derive(Debug, Clone, Default)]
12pub struct ListNotificationOptions {
14 pub list_options: ListOptions,
15 pub since: Option<OffsetDateTime>,
16 pub before: Option<OffsetDateTime>,
17 pub status: Vec<NotifyStatus>,
18 pub subject_types: Vec<NotifySubjectType>,
19}
20
21impl crate::pagination::QueryEncode for ListNotificationOptions {
22 fn query_encode(&self) -> String {
23 let mut out = self.list_options.query_encode();
24 if let Some(since) = self.since
25 && let Ok(formatted) = since.format(&time::format_description::well_known::Rfc3339)
26 {
27 out.push_str(&format!("&since={formatted}"));
28 }
29 if let Some(before) = self.before
30 && let Ok(formatted) = before.format(&time::format_description::well_known::Rfc3339)
31 {
32 out.push_str(&format!("&before={formatted}"));
33 }
34 for s in &self.status {
35 out.push_str(&format!("&status-types={}", s.as_ref()));
36 }
37 for s in &self.subject_types {
38 out.push_str(&format!("&subject-type={}", s.as_ref()));
39 }
40 out
41 }
42}
43
44#[derive(Debug, Clone, Default)]
45pub struct MarkNotificationOptions {
47 pub last_read_at: Option<OffsetDateTime>,
48 pub status: Vec<NotifyStatus>,
49 pub to_status: Option<NotifyStatus>,
50}
51
52impl crate::pagination::QueryEncode for MarkNotificationOptions {
53 fn query_encode(&self) -> String {
54 let mut out = String::new();
55 if let Some(last_read) = self.last_read_at
56 && let Ok(formatted) = last_read.format(&time::format_description::well_known::Rfc3339)
57 {
58 out.push_str(&format!("last_read_at={formatted}"));
59 }
60 for s in &self.status {
61 if !out.is_empty() {
62 out.push('&');
63 }
64 out.push_str(&format!("status-types={}", s.as_ref()));
65 }
66 if let Some(to_status) = self.to_status {
67 if !out.is_empty() {
68 out.push('&');
69 }
70 out.push_str(&format!("to-status={}", to_status.as_ref()));
71 }
72 out
73 }
74}