Skip to main content

gproxy_protocol/protocol/gemini/common/
citation.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::ExtraFields;
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
8#[serde(rename_all = "camelCase")]
9pub struct CitationMetadata {
10    #[serde(default, skip_serializing_if = "Vec::is_empty")]
11    pub citation_sources: Vec<CitationSource>,
12    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
13    pub extra: ExtraFields,
14}
15
16#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
17#[serde(rename_all = "camelCase")]
18pub struct CitationSource {
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub start_index: Option<i32>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub end_index: Option<i32>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub uri: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub license: Option<String>,
27    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
28    pub extra: ExtraFields,
29}