genius_rust/
annotation.rs1use 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 #[serde(skip_serializing_if = "Option::is_none")]
18 pub ios_app_url: Option<String>,
19 pub is_description: bool,
20 #[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 #[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}