use crate::error::{Error, Result};
use super::check::serialize_option_vec_string;
#[cfg(feature = "cli")]
use clap::Args;
use serde::{Deserialize, Serialize};
pub mod add;
pub mod delete;
pub fn parse_word(v: &str) -> Result<String> {
if !v.contains(' ') {
return Ok(v.to_string());
}
Err(Error::InvalidValue(
"The value should be a word that does not contain any whitespace".to_string(),
))
}
#[cfg_attr(feature = "cli", derive(Args))]
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize, Hash)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct LoginArgs {
#[cfg_attr(
feature = "cli",
clap(short = 'u', long, required = true, env = "LANGUAGETOOL_USERNAME")
)]
pub username: String,
#[cfg_attr(
feature = "cli",
clap(short = 'k', long, required = true, env = "LANGUAGETOOL_API_KEY")
)]
pub api_key: String,
}
#[cfg_attr(feature = "cli", derive(Args))]
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize, Hash)]
#[non_exhaustive]
pub struct Request {
#[cfg_attr(feature = "cli", clap(long))]
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<isize>,
#[cfg_attr(feature = "cli", clap(long))]
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<isize>,
#[cfg_attr(feature = "cli", clap(flatten))]
#[serde(flatten)]
pub login: LoginArgs,
#[cfg_attr(feature = "cli", clap(long))]
#[serde(serialize_with = "serialize_option_vec_string")]
#[serde(skip_serializing_if = "Option::is_none")]
pub dicts: Option<Vec<String>>,
}
#[cfg(feature = "cli")]
#[derive(Args, Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
#[non_exhaustive]
pub struct RequestArgs {
#[cfg_attr(feature = "cli", clap(long, default_value = "0"))]
pub offset: isize,
#[cfg_attr(feature = "cli", clap(long, default_value = "10"))]
pub limit: isize,
#[cfg_attr(feature = "cli", clap(flatten))]
#[serde(flatten)]
pub login: Option<LoginArgs>,
#[cfg_attr(feature = "cli", clap(long))]
#[serde(serialize_with = "serialize_option_vec_string")]
pub dicts: Option<Vec<String>>,
}
#[cfg(feature = "cli")]
impl From<RequestArgs> for Request {
#[inline]
fn from(args: RequestArgs) -> Self {
Self {
offset: Some(args.offset),
limit: Some(args.limit),
login: args.login.unwrap(),
dicts: args.dicts,
}
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
#[non_exhaustive]
pub struct Response {
pub words: Vec<String>,
}