genius_rust/
annotation.rs

1use serde::{Serialize, Deserialize};
2use std::collections::BTreeMap as Map;
3
4use crate::user::{User, UserMetadata};
5use crate::Body;
6
7#[derive(Serialize, Deserialize, Debug)]
8pub struct Referent {
9    pub _type: String,
10    pub annotator_id: u32,
11    pub annotator_login: String,
12    pub api_path: String,
13    pub classification: String,
14    pub fragment: String,
15    pub id: u32,
16    /// > Only with `user-core` level token
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub ios_app_url: Option<String>,
19    pub is_description: bool,
20    /// > Only with `user-core` level token
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub is_image: Option<bool>,
23    pub path: String,
24    pub range: Map<String, String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub song_id: Option<u32>,
27    pub url: String,
28    /// > Only with `user-core` level token
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub current_user_metadata: Option<UserMetadata>,
31    pub annotations: Vec<Annotation>,
32}
33
34#[derive(Serialize, Deserialize, Debug)]
35pub struct Annotation {
36    pub api_path: String,
37    pub body: Body,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub comment_count: Option<u32>,
40    pub community: bool,
41    pub has_voters: bool,
42    pub id: u32,
43    pub pinned: bool,
44    pub share_url: String,
45    pub state: String,
46    pub url: String,
47    pub verified: bool,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub votes_total: Option<u32>,
50    pub current_user_metadata: UserMetadata,
51    pub authors: Vec<AnnotationAuthor>,
52}
53
54#[derive(Serialize, Deserialize, Debug)]
55pub struct AnnotationAuthor {
56    pub attribution: f32,
57    pub user: User,
58}