use chrono::NaiveDate;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::list::ListIter;
use crate::uri::Uri;
use crate::util::{API_RULING, CARDS_URL};
#[derive(Serialize, Deserialize, Clone, Eq, PartialEq, Hash, Debug)]
#[cfg_attr(test, serde(deny_unknown_fields))]
#[non_exhaustive]
pub struct Ruling {
pub oracle_id: Uuid,
pub source: Source,
pub published_at: NaiveDate,
pub comment: String,
#[cfg(test)]
#[serde(rename = "object")]
_object: String,
}
#[derive(Serialize, Deserialize, Copy, Clone, Eq, PartialEq, Hash, Debug)]
#[cfg_attr(test, serde(deny_unknown_fields))]
#[serde(rename_all = "snake_case")]
#[allow(missing_docs)]
pub enum Source {
Wotc,
Scryfall,
}
impl Ruling {
pub async fn multiverse_id(id: usize) -> crate::Result<ListIter<Self>> {
Uri::from(
CARDS_URL
.join("multiverse/")?
.join(&format!("{id}/"))?
.join(API_RULING)?,
)
.fetch_iter()
.await
}
pub async fn mtgo_id(id: usize) -> crate::Result<ListIter<Self>> {
Uri::from(
CARDS_URL
.join("mtgo/")?
.join(&format!("{id}/"))?
.join(API_RULING)?,
)
.fetch_iter()
.await
}
pub async fn arena_id(id: usize) -> crate::Result<ListIter<Self>> {
Uri::from(
CARDS_URL
.join("arena/")?
.join(&format!("{id}/"))?
.join(API_RULING)?,
)
.fetch_iter()
.await
}
pub async fn set_and_number(set: &str, number: u32) -> crate::Result<ListIter<Self>> {
Uri::from(
CARDS_URL
.join(&format!("{set}/{number}/"))?
.join(API_RULING)?,
)
.fetch_iter()
.await
}
pub async fn uuid(id: Uuid) -> crate::Result<ListIter<Self>> {
Uri::from(CARDS_URL.join(&format!("{id}/"))?.join(API_RULING)?)
.fetch_iter()
.await
}
}