#[cfg(feature = "with-serde")]
#[macro_use]
extern crate serde_derive;
mod composite;
mod page;
mod simple;
use cfg_if;
cfg_if::cfg_if! {
    if #[cfg(feature = "page-size-5")]{
        pub const DEFAULT_PAGE_SIZE: u32 = 5;
    } else if #[cfg(feature = "page-size-10")]{
        pub const DEFAULT_PAGE_SIZE: u32 = 10;
    } else if #[cfg(feature = "page-size-15")] {
        pub const DEFAULT_PAGE_SIZE: u32 = 15;
    } else if #[cfg(feature = "page-size-20")] {
        pub const DEFAULT_PAGE_SIZE: u32 = 20;
    } else if #[cfg(feature = "page-size-50")] {
        pub const DEFAULT_PAGE_SIZE: u32 = 50;
    } else {
        pub const DEFAULT_PAGE_SIZE: u32 = 20;
    }
}
pub const DEFAULT_MAX_PAGE_SIZE: u32 = 100;
pub trait Pageable {
        fn page_number(&self) -> u32;
        fn page_size(&self) -> u32;
}
pub trait Offsetable {
        fn offset(&self) -> u64;
        fn limit(&self) -> u32;
}
pub trait IntoOffset {
        type Offset: Offsetable + Sized;
        fn into_offset(self, default_page_size: u32, max_page_size: u32) -> Self::Offset;
}
pub trait DefaultIntoOffset {
        type Offset: Offsetable + Sized;
        fn into_offset(self) -> Self::Offset;
}
pub use composite::OffsetRequest;
pub use composite::PageRequest;
pub use page::Page;
pub use simple::OffsetParams;
pub use simple::PageParams;