#![allow(unused_variables)]
#![allow(dead_code)]
use crate::client::{GetPocket, RecordSendDirect};
use anyhow::Result;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Error, Debug)]
pub enum ModifyingError<'a> {
#[error("Invalid Params: `{0}`")]
InvalidParams(&'a str),
}
#[derive(Debug, Deserialize, Clone)]
pub struct RecordModified {
pub is_success: bool,
pub status: i32,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub errors: Vec<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<serde_json::Value>,
}
#[derive(Debug, Serialize)]
pub enum Action {
#[serde(rename = "archive")]
Archive,
#[serde(rename = "readd")]
Readd,
#[serde(rename = "favorite")]
Favorite,
#[serde(rename = "unfavorite")]
Unfavorite,
#[serde(rename = "delete")]
Delete,
}
#[derive(Debug, Serialize)]
pub struct RequestArchive {
action: Action,
item_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
time: Option<i32>,
}
#[derive(Debug, Serialize)]
pub struct RequestReadd {
action: Action,
item_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
time: Option<i32>,
}
#[derive(Debug, Serialize)]
pub struct RequestFavorite {
action: Action,
item_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
time: Option<i32>,
}
#[derive(Debug, Serialize)]
pub struct RequestUnfavorite {
action: Action,
item_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
time: Option<i32>,
}
#[derive(Debug, Serialize)]
pub struct RequestDelete {
action: Action,
item_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
time: Option<i32>,
}
#[async_trait]
pub trait ModifyingExt {
#[deprecated(
since = "0.3.0",
note = "This function will be removed in next version. Please see the README for migration guidance."
)]
async fn archive(&self, item_id: i64) -> Result<RecordModified>;
#[deprecated(
since = "0.3.0",
note = "This function will be removed in next version. Please see the README for migration guidance."
)]
async fn readd(&self, item_id: i64) -> Result<RecordModified>;
#[deprecated(
since = "0.3.0",
note = "This function will be removed in next version. Please see the README for migration guidance."
)]
async fn favorite(&self, item_id: i64) -> Result<RecordModified>;
#[deprecated(
since = "0.3.0",
note = "This function will be removed in next version. Please see the README for migration guidance."
)]
async fn unfavorite(&self, item_id: i64) -> Result<RecordModified>;
#[deprecated(
since = "0.3.0",
note = "This function will be removed in next version. Please see the README for migration guidance."
)]
async fn delete(&self, item_id: i64) -> Result<RecordModified>;
}
#[async_trait]
impl ModifyingExt for GetPocket {
async fn archive(&self, item_id: i64) -> Result<RecordModified> {
let params = RequestArchive {
action: Action::Archive,
item_id,
time: None,
};
let resp = &self.send(&[params]).await?;
Ok(resp.into())
}
async fn readd(&self, item_id: i64) -> Result<RecordModified> {
let params = RequestReadd {
action: Action::Readd,
item_id,
time: None,
};
let resp = &self.send(&[params]).await?;
Ok(resp.into())
}
async fn favorite(&self, item_id: i64) -> Result<RecordModified> {
let params = RequestFavorite {
action: Action::Favorite,
item_id,
time: None,
};
let resp = &self.send(&[params]).await?;
Ok(resp.into())
}
async fn unfavorite(&self, item_id: i64) -> Result<RecordModified> {
let params = RequestUnfavorite {
action: Action::Unfavorite,
item_id,
time: None,
};
let resp = &self.send(&[params]).await?;
Ok(resp.into())
}
async fn delete(&self, item_id: i64) -> Result<RecordModified> {
let params = RequestDelete {
action: Action::Delete,
item_id,
time: None,
};
let resp = &self.send(&[params]).await?;
Ok(resp.into())
}
}
impl From<&RecordSendDirect> for RecordModified {
fn from(record: &RecordSendDirect) -> Self {
match record {
RecordSendDirect::Standart(record) => {
let Some(first_action_result) = record.action_results.get(0) else {
return Self {
is_success: false,
status: record.status,
errors: vec![Some("No action results".to_string())],
data: None,
};
};
Self {
is_success: *first_action_result,
status: record.status,
errors: vec![],
data: None,
}
}
RecordSendDirect::Extended(record) => Self {
is_success: !record.action_errors.is_empty(),
status: record.status,
errors: record.action_errors.clone(),
data: Some(record.action_results.clone()),
},
}
}
}