rchan 0.4.0

4chan api wrapper and client.
Documentation
use std::fmt;

use serde::de::{
	self,
	Visitor,
};

use super::*;

struct CapcodeVisitor;

impl<'de> Visitor<'de> for CapcodeVisitor {
	type Value = Capcode;

	fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
		write!(
			formatter,
			"one of [mod, admin, admin_highlight, manager, developer,, founder]"
		)
	}

	fn visit_str<E: de::Error>(self, s: &str) -> Result<Self::Value, E> {
		Ok(match s {
			"mod" => Capcode::Mod,
			"admin" => Capcode::Admin,
			"admin_highlight" => Capcode::AdminHighlight,
			"manager" => Capcode::Manager,
			"developer" => Capcode::Developer,
			"founder" => Capcode::Founder,
			_ => return Err(E::custom(format!("{} is not a valid capcode", s))),
		})
	}
}

impl<'de> serde::Deserialize<'de> for Capcode {
	fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
	where
		D: Deserializer<'de>,
	{
		deserializer.deserialize_str(CapcodeVisitor)
	}
}