Crates.io

lenghtawarepaginator

toml lenght_aware_paginator = "0.1.0"

Lenght aware paginator enables you to paginate Diesel queries and have information about the lenght of data being paginated. It will give you total number of items, and last page that you can navigate to and still get some kind of data.

You will only have to provide page and per_page parameters.

```rust use diesel::pg::PgConnection; use diesel::Connection; use diesel::QueryDsl; use lenghtawarepaginator::{LoadPaginated, Response}; use serde::{Deserialize, Serialize};

// user.rs : your model for the table represented in schema.rs

[derive(Queryable, Deserialize, Serialize)]

pub struct User { id: i32, email: String, firstname: String, lastname: String, password: String, }

fn getconnection() -> PgConnection { let databaseurl = dotenv::var("DATABASEURL").expect("You have to provide DATABASEURL to run tests");

PgConnection::establish(&database_url)
    .unwrap_or_else(|_| panic!("Error connecting to {}", &database_url))

}

[test]

fn testormquerypagination() { let connection = getconnection();

// Use `lenght_aware_paginator::LoadPaginated` trait to enable
// using the `load_paginated` method on your query.
// Your query will return `lenght_aware_paginator::Response<T>` struct
let response: Response<User> = schema::users::table
    .into_boxed()
    .load_paginated(connection, page, per_page)
    .unwrap();

assert_eq!(response.page, 1);
assert_eq!(response.per_page, 10);
assert_eq!(response.total, 15);
assert_eq!(response.last_page, 2);
assert_eq!(response.data.len(), 10);

} ```

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. Crates.io

lengthawarepaginator

toml length_aware_paginator = "0.1.0"

Length aware paginator enables you to paginate Diesel queries and have information about the length of data being paginated. It will give you total number of items, and last page that you can navigate to and still get some kind of data.

You will only have to provide page and per_page parameters.

```rust use diesel::pg::PgConnection; use diesel::Connection; use diesel::QueryDsl; use lengthawarepaginator::{LoadPaginated, Response}; use serde::{Deserialize, Serialize};

/// Get the database connection /// panics if no DATABASEURL is defined in the env or if the db is unreachable fn getconnection() -> PgConnection { let databaseurl = dotenv::var("DATABASEURL").expect("You have to provide DATABASE_URL to run tests");

PgConnection::establish(&database_url)
    .unwrap_or_else(|_| panic!("Error connecting to {}", &database_url))

}

// schema.rs : autogenerated by diesel after running migration table! { users (id) { id -> Int4, email -> Varchar, firstname -> Varchar, lastname -> Varchar, password -> Varchar, } }

// user.rs : your model for the table represented in schema.rs

[derive(Queryable, Deserialize, Serialize)]

pub struct User { id: i32, email: String, firstname: String, lastname: String, password: String, }

[test]

fn testormquerypagination() { let connection = getconnection();

// Use `length_aware_paginator::LoadPaginated` trait to enable
// using the `load_paginated` method on your query.
// Your query will return `length_aware_paginator::Response<T>` struct
let response: Response<User> = schema::users::table
    .into_boxed()
    .load_paginated(connection, page, per_page)
    .unwrap();

assert_eq!(response.page, 1);
assert_eq!(response.per_page, 10);
assert_eq!(response.total, 15);
assert_eq!(response.last_page, 2);
assert_eq!(response.data.len(), 10);

} ```

Limitations

Unfortunatelly this is still not implemented to work with sql_query() due to its own limitations. Maybe in the future I'll update this package to enable this.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.