mirror of https://github.com/torvalds/linux.git
62 lines
1.6 KiB
Rust
62 lines
1.6 KiB
Rust
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
//! Errors for the [`Vec`] type.
|
|
|
|
use core::fmt::{self, Debug, Formatter};
|
|
use kernel::prelude::*;
|
|
|
|
/// Error type for [`Vec::push_within_capacity`].
|
|
pub struct PushError<T>(pub T);
|
|
|
|
impl<T> Debug for PushError<T> {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
|
write!(f, "Not enough capacity")
|
|
}
|
|
}
|
|
|
|
impl<T> From<PushError<T>> for Error {
|
|
fn from(_: PushError<T>) -> Error {
|
|
// Returning ENOMEM isn't appropriate because the system is not out of memory. The vector
|
|
// is just full and we are refusing to resize it.
|
|
EINVAL
|
|
}
|
|
}
|
|
|
|
/// Error type for [`Vec::remove`].
|
|
pub struct RemoveError;
|
|
|
|
impl Debug for RemoveError {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
|
write!(f, "Index out of bounds")
|
|
}
|
|
}
|
|
|
|
impl From<RemoveError> for Error {
|
|
fn from(_: RemoveError) -> Error {
|
|
EINVAL
|
|
}
|
|
}
|
|
|
|
/// Error type for [`Vec::insert_within_capacity`].
|
|
pub enum InsertError<T> {
|
|
/// The value could not be inserted because the index is out of bounds.
|
|
IndexOutOfBounds(T),
|
|
/// The value could not be inserted because the vector is out of capacity.
|
|
OutOfCapacity(T),
|
|
}
|
|
|
|
impl<T> Debug for InsertError<T> {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
|
match self {
|
|
InsertError::IndexOutOfBounds(_) => write!(f, "Index out of bounds"),
|
|
InsertError::OutOfCapacity(_) => write!(f, "Not enough capacity"),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<T> From<InsertError<T>> for Error {
|
|
fn from(_: InsertError<T>) -> Error {
|
|
EINVAL
|
|
}
|
|
}
|