use crate::error::Error;
use crate::generated::types::{HabitPayload, HabitRequestContent, Recording};
pub use crate::generated::services::habits::*;
#[derive(Debug, Clone, Default, PartialEq)]
pub struct HabitParams {
pub name: String,
pub icon: String,
pub color: String,
pub days: Vec<i32>,
}
impl<'a> Habits<'a> {
pub async fn create_habit(&self, params: &HabitParams) -> Result<Recording, Error> {
self.create(&habit_body(params)).await
}
pub async fn update_habit(
&self,
habit_id: i64,
params: &HabitParams,
) -> Result<Recording, Error> {
self.update(habit_id, &habit_body(params)).await
}
}
fn habit_body(params: &HabitParams) -> HabitRequestContent {
HabitRequestContent {
calendar_habit: HabitPayload {
name: omit_empty(¶ms.name),
icon: omit_empty(¶ms.icon),
color: omit_empty(¶ms.color),
days: if params.days.is_empty() {
None
} else {
Some(params.days.clone())
},
},
}
}
fn omit_empty(value: &str) -> Option<String> {
if value.is_empty() {
None
} else {
Some(value.to_string())
}
}