fix(models): fixing parsing of snapshot data
This commit is contained in:
parent
f16d6d29c7
commit
ada4a7733c
3 changed files with 104 additions and 12 deletions
|
|
@ -13,6 +13,11 @@ repos:
|
||||||
hooks:
|
hooks:
|
||||||
- id: fmt
|
- id: fmt
|
||||||
- id: cargo-check
|
- id: cargo-check
|
||||||
|
stages: [pre-push]
|
||||||
|
- id: build
|
||||||
|
stages: [pre-push]
|
||||||
|
- id: test
|
||||||
|
stages: [pre-push]
|
||||||
- repo: https://github.com/compilerla/conventional-pre-commit
|
- repo: https://github.com/compilerla/conventional-pre-commit
|
||||||
rev: v3.4.0
|
rev: v3.4.0
|
||||||
hooks:
|
hooks:
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,4 @@ pub mod errors;
|
||||||
pub use errors::SzurubooruResult;
|
pub use errors::SzurubooruResult;
|
||||||
pub mod models;
|
pub mod models;
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests;
|
|
||||||
pub mod tokens;
|
pub mod tokens;
|
||||||
|
|
|
||||||
|
|
@ -890,6 +890,9 @@ pub enum SnapshotResourceType {
|
||||||
Post,
|
Post,
|
||||||
/// Pool resource
|
/// Pool resource
|
||||||
Pool,
|
Pool,
|
||||||
|
/// Pool Category
|
||||||
|
#[serde(rename = "pool_category")]
|
||||||
|
PoolCategory,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
|
@ -905,6 +908,8 @@ pub enum SnapshotCreationDeletionData {
|
||||||
Post(PostResource),
|
Post(PostResource),
|
||||||
/// A pool resource that was created
|
/// A pool resource that was created
|
||||||
Pool(PoolResource),
|
Pool(PoolResource),
|
||||||
|
/// A pool category resource that was created
|
||||||
|
PoolCategory(PoolCategoryResource),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
|
@ -922,13 +927,6 @@ pub struct SnapshotModificationData {
|
||||||
pub value: serde_json::Value,
|
pub value: serde_json::Value,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
||||||
/// Data for a merged resource
|
|
||||||
pub struct SnapshotMergeData {
|
|
||||||
/// Resource IDs that have been merged
|
|
||||||
pub merged: Vec<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
#[serde(untagged)]
|
#[serde(untagged)]
|
||||||
/// Type representing the data as part of a snapshot
|
/// Type representing the data as part of a snapshot
|
||||||
|
|
@ -939,7 +937,7 @@ pub enum SnapshotData {
|
||||||
/// Data for a modified resource
|
/// Data for a modified resource
|
||||||
Modify(SnapshotModificationData),
|
Modify(SnapshotModificationData),
|
||||||
/// Data for a merged resource
|
/// Data for a merged resource
|
||||||
Merge(SnapshotMergeData),
|
Merge(Vec<String>),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
|
@ -952,7 +950,7 @@ pub struct SnapshotResource {
|
||||||
/// The resource type
|
/// The resource type
|
||||||
pub resource_type: Option<SnapshotResourceType>,
|
pub resource_type: Option<SnapshotResourceType>,
|
||||||
/// The ID of the snapshot itself
|
/// The ID of the snapshot itself
|
||||||
pub id: Option<u32>,
|
pub id: Option<String>,
|
||||||
/// The user who created this change
|
/// The user who created this change
|
||||||
pub user: Option<MicroUserResource>,
|
pub user: Option<MicroUserResource>,
|
||||||
/// The data associated with this resource change
|
/// The data associated with this resource change
|
||||||
|
|
@ -994,7 +992,7 @@ pub struct AroundPostResult {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::models::{GlobalInfo, GlobalInfoConfig, TagCategoryResource};
|
use crate::models::{GlobalInfo, GlobalInfoConfig, SnapshotResource, TagCategoryResource};
|
||||||
use chrono::Datelike;
|
use chrono::Datelike;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -1065,4 +1063,95 @@ mod tests {
|
||||||
.expect("Unable to parse tag category string");
|
.expect("Unable to parse tag category string");
|
||||||
assert_eq!(tag_cat.name, Some("default".to_string()));
|
assert_eq!(tag_cat.name, Some("default".to_string()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_parse_snapshot() {
|
||||||
|
let input_str = r#"
|
||||||
|
{
|
||||||
|
"operation": "merged",
|
||||||
|
"type": "pool",
|
||||||
|
"id": "2",
|
||||||
|
"user": {
|
||||||
|
"name": "integration_user",
|
||||||
|
"avatarUrl": "https://gravatar.com/avatar/6ab25d2babacc114ca560bff7c264d08?d=retro&s=300"
|
||||||
|
},
|
||||||
|
"data": [
|
||||||
|
"pool",
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"time": "2024-08-11T19:53:34.384644Z"
|
||||||
|
}
|
||||||
|
"#;
|
||||||
|
serde_json::from_str::<SnapshotResource>(input_str)
|
||||||
|
.expect("Could not parse merged snapshot resource");
|
||||||
|
|
||||||
|
let input_str = r#"
|
||||||
|
{
|
||||||
|
"operation": "modified",
|
||||||
|
"type": "pool_category",
|
||||||
|
"id": "cat_pool_category",
|
||||||
|
"user": {
|
||||||
|
"name": "integration_user",
|
||||||
|
"avatarUrl": "https://gravatar.com/avatar/6ab25d2babacc114ca560bff7c264d08?d=retro&s=300"
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"type": "object change",
|
||||||
|
"value": {
|
||||||
|
"default": {
|
||||||
|
"type": "primitive change",
|
||||||
|
"old-value": false,
|
||||||
|
"new-value": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"time": "2024-08-11T19:53:33.422437Z"
|
||||||
|
}
|
||||||
|
"#;
|
||||||
|
serde_json::from_str::<SnapshotResource>(input_str)
|
||||||
|
.expect("Could not parse modified snapshot resource");
|
||||||
|
|
||||||
|
let input_str = r#"
|
||||||
|
{
|
||||||
|
"operation": "deleted",
|
||||||
|
"type": "pool",
|
||||||
|
"id": "3",
|
||||||
|
"user": {
|
||||||
|
"name": "integration_user",
|
||||||
|
"avatarUrl": "https://gravatar.com/avatar/6ab25d2babacc114ca560bff7c264d08?d=retro&s=300"
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"names": [
|
||||||
|
"dogs_pool"
|
||||||
|
],
|
||||||
|
"category": "cat_pool_category",
|
||||||
|
"posts": []
|
||||||
|
},
|
||||||
|
"time": "2024-08-11T19:53:34.006828Z"
|
||||||
|
}
|
||||||
|
"#;
|
||||||
|
serde_json::from_str::<SnapshotResource>(input_str)
|
||||||
|
.expect("Could not parse deleted snapshot resource");
|
||||||
|
|
||||||
|
let input_str = r#"
|
||||||
|
{
|
||||||
|
"operation": "created",
|
||||||
|
"type": "pool",
|
||||||
|
"id": "1",
|
||||||
|
"user": {
|
||||||
|
"name": "integration_user",
|
||||||
|
"avatarUrl": "https://gravatar.com/avatar/6ab25d2babacc114ca560bff7c264d08?d=retro&s=300"
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"names": [
|
||||||
|
"cats_pool"
|
||||||
|
],
|
||||||
|
"category": "cat_pool_category",
|
||||||
|
"posts": []
|
||||||
|
},
|
||||||
|
"time": "2024-08-11T19:53:33.613959Z"
|
||||||
|
}
|
||||||
|
"#;
|
||||||
|
serde_json::from_str::<SnapshotResource>(input_str)
|
||||||
|
.expect("Could not parse created snapshot resource");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue