I want to implement Pagination
object, but my code do not compliles because of trait:
error[E0308]: mismatched types
--> src/lib.rs:18:31
|
9 | impl<T: Integer> Pagination<T> {
| - this type parameter
...
18 | let total_pages = 0..=self.items_count / self.per_page;
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| | |
| | expected integer, found type parameter `T`
| arguments to this function are incorrect
|
= note: expected type `{integer}`
found type parameter `T`
note: associated function defined here
error[E0308]: mismatched types
--> src/lib.rs:20:40
|
9 | impl<T: Integer> Pagination<T> {
| - this type parameter
...
20 | if index > self.per_page * page {
| ^^^^ expected type parameter `T`, found integer
|
= note: expected type parameter `T`
found type `{integer}`
this is my code:
use num::Integer;
use std::io::{Error, ErrorKind};
struct Pagination<T: Integer> {
items_count: T,
per_page: T,
}
impl<T: Integer> Pagination<T> {
pub fn new(items_count: T, per_page: T) -> Self {
Self {
items_count,
per_page,
}
}
pub fn get_page_number(&mut self, index: T) -> Result<T, Error> {
let total_pages = 0..=self.items_count / self.per_page;
for page in total_pages.rev() {
if index > self.per_page * page {
return Ok(page);
}
}
Err(Error::new(ErrorKind::Other, ""))
}
}
Could somebody explain what I did wrong ? I just want to allow Pagination
to be any integer (like u32, u16, u128 etc). Probably I should use another trait ?