#[cfg(feature = "catchall")]
use std::collections::HashMap;
use chrono::{serde::ts_seconds, DateTime, Utc};
use serde::{Deserialize, Serialize};
#[cfg(feature = "catchall")]
use serde_json::Value;
use super::{
AnnotationMetadata, Metadata, ReferentCore, Role, Text, UserCore,
UserInteractionMetadata, UserInteractions,
};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct AnnotationResponse {
pub annotation: Annotation,
pub referent: ReferentCore,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct Annotation {
pub api_path: String,
pub body: Text,
pub comment_count: u32,
pub community: bool,
pub custom_preview: (),
pub has_voters: bool,
pub id: u32,
pub pinned: bool,
pub share_url: String,
pub source: (),
pub state: AnnotationState,
pub url: String,
pub verified: bool,
pub votes_total: i32,
pub rejection_comment: Option<RejectionComment>,
pub cosigned_by: Vec<UserCore<Metadata<UserInteractions>>>,
pub verified_by: Option<UserCore<Metadata<UserInteractions>>>,
pub authors: Vec<Attributions>,
pub current_user_metadata: AnnotationMetadata,
#[cfg(feature = "catchall")]
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct RejectionComment {
pub api_path: String,
pub body: Text,
pub commentable_id: u32,
pub commentable_type: String,
#[serde(with = "ts_seconds")]
pub created_at: DateTime<Utc>,
pub has_voters: bool,
pub id: u32,
pub pinned_role: Option<String>,
pub votes_total: u32,
pub anonymous_author: (),
pub author: UserCore<UserInteractionMetadata>,
pub reason: Option<RejectionReason>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct RejectionReason {
pub context_url: String,
pub display_character: char,
pub handle: String,
pub id: u32,
pub name: String,
pub raw_name: String,
pub requires_body: bool,
pub slug: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct Attributions {
pub attribution: f64,
pub pinned_role: Option<Role>,
pub user: UserCore<Metadata<UserInteractions>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum AnnotationState {
#[default]
Verified,
NeedsExegesis,
Accepted,
Suspect,
Rough,
Pending,
}