use frunk_core::HList;
use gdp_rs::{predicate::impl_::all_of::AllOf, Proven};
use super::predicate::is_normal::IsNormal;
use crate::{
predicate::{
has_no_query::HasNoQuery, has_trailing_slash::PathHasTrailingSlash,
is_absolute::IsAbsolute, is_secure::IsSecure,
},
HttpUri,
};
pub type AbsoluteHttpUri = Proven<HttpUri, IsAbsolute>;
pub type NormalHttpUri = Proven<HttpUri, IsNormal>;
pub type NormalAbsoluteHttpUri = Proven<HttpUri, AllOf<HttpUri, HList!(IsNormal, IsAbsolute)>>;
pub type HierarchicalTrailingSlashHttpUri =
Proven<HttpUri, AllOf<HttpUri, HList!(IsNormal, IsAbsolute, HasNoQuery, PathHasTrailingSlash)>>;
pub type SecureHttpUri<STP> = Proven<HttpUri, IsSecure<STP>>;