hyper-static-server 0.5.1

Simple friendly library to build static servers with hyper HTTP server.
Documentation


use crate::hss;


use crate::{
		
		hss::ServerResult,
		hss::Extensions,
		
		hss::ResultExtWrap,
		hss::fail_with_code,
		hss::fail_with_message,
		hss::fail_with_format,
		
	};




pub trait AskamaContext
		where Self : Sized
{
	fn new_with_defaults () -> ServerResult<Self> {
		fail_with_message! (0xe41380ce, "context can't be created with defaults!");
	}
	
	fn new_with_extensions (_extensions : &hss::Extensions) -> ServerResult<Self> {
		Self::new_with_defaults ()
	}
	
	fn new_with_deserialization (_encoding : &str, _data : &[u8], _extensions : &hss::Extensions) -> ServerResult<Self> {
		fail_with_message! (0x97024f74, "context can't be deserialized!");
	}
}


impl AskamaContext for () {
	
	fn new_with_defaults () -> ServerResult<()> {
		Ok (())
	}
	
	fn new_with_deserialization (_encoding : &str, _data : &[u8], _extensions : &hss::Extensions) -> ServerResult<Self> {
		Ok (())
	}
}




#[ cfg (feature = "runtime-askama-serde") ]
pub trait AskamaContextSerde
		where
				Self : Sized,
				Self : ::serde::de::DeserializeOwned,
{
	fn new_with_serde <'a> (_encoding : &str, _data : &[u8]) -> ServerResult<Self> {
		match _encoding {
			
			#[ cfg (feature = "toml") ]
			"toml" =>
				::toml::from_slice (_data) .or_wrap (0xd02e891d),
			
			#[ cfg (feature = "serde_yaml") ]
			"yaml" =>
				::serde_yaml::from_slice (_data) .or_wrap (0xf6e7147f),
			
			#[ cfg (feature = "serde_json") ]
			"json" =>
				::serde_json::from_slice (_data) .or_wrap (0xa8d9dccf),
			
			"auto" => {
				let _encoding = if _data.starts_with (b"## toml\n") {
					"toml"
				} else if _data.starts_with (b"## yaml\n") {
					"yaml"
				} else if _data.starts_with (b"{") || _data.starts_with (b"[") {
					"json"
				} else {
					fail_with_format! (0x164f2b63, "encoding `{}` failed to match", _encoding);
				};
				Self::new_with_serde (_encoding, _data)
			}
			
			_ =>
				fail_with_format! (0x95017b94, "encoding `{}` not supported", _encoding),
		}
	}
}


#[ cfg (feature = "runtime-askama-serde") ]
impl <S : AskamaContextSerde> AskamaContext for S {
	
	fn new_with_deserialization (_encoding : &str, _data : &[u8], _extensions : &hss::Extensions) -> ServerResult<Self> {
		Self::new_with_serde (_encoding, _data)
	}
}




#[ cfg (feature = "runtime-askama-serde") ]
#[ derive (Debug, Clone) ]
#[ derive (serde::Serialize, serde::Deserialize) ]
pub struct AskamaDocumentMetadata {
	pub title : Option<String>,
	pub headings : Option<Vec<AskamaDocumentHeading>>,
}


#[ cfg (feature = "runtime-askama-serde") ]
#[ derive (serde::Serialize, serde::Deserialize) ]
#[ derive (Debug, Clone) ]
pub struct AskamaDocumentHeading {
	pub level : u8,
	pub text : Option<String>,
	pub anchor : Option<String>,
}


#[ cfg (feature = "runtime-askama-serde") ]
impl AskamaDocumentMetadata {
	
	pub fn load_from_json (_json : &str) -> ServerResult<Self> {
		::serde_json::from_str (_json) .or_wrap (0x6410e85f)
	}
}




#[ cfg (not (feature = "runtime-askama-serde")) ]
#[ derive (Debug, Clone) ]
pub struct AskamaDocumentMetadata ();


#[ cfg (not (feature = "runtime-askama-serde")) ]
impl AskamaDocumentMetadata {
	
	pub fn load_from_json (_json : &str) -> ServerResult<Self> {
		Ok (Self ())
	}
}