mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-26 12:05:05 +08:00
Introduce error types to avoid panics
This commit is contained in:
parent
548c8247c2
commit
add2ceef67
@ -17,6 +17,7 @@ use meilisearch_types::milli;
|
|||||||
use meilisearch_types::milli::heed::types::{Bytes, DecodeIgnore, SerdeJson};
|
use meilisearch_types::milli::heed::types::{Bytes, DecodeIgnore, SerdeJson};
|
||||||
use meilisearch_types::milli::heed::{Database, Env, EnvOpenOptions, RwTxn};
|
use meilisearch_types::milli::heed::{Database, Env, EnvOpenOptions, RwTxn};
|
||||||
use sha2::Sha256;
|
use sha2::Sha256;
|
||||||
|
use thiserror::Error;
|
||||||
use time::OffsetDateTime;
|
use time::OffsetDateTime;
|
||||||
use uuid::fmt::Hyphenated;
|
use uuid::fmt::Hyphenated;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
@ -297,13 +298,14 @@ impl<'a> milli::heed::BytesDecode<'a> for KeyIdActionCodec {
|
|||||||
type DItem = (KeyId, Action, Option<&'a [u8]>);
|
type DItem = (KeyId, Action, Option<&'a [u8]>);
|
||||||
|
|
||||||
fn bytes_decode(bytes: &'a [u8]) -> StdResult<Self::DItem, BoxedError> {
|
fn bytes_decode(bytes: &'a [u8]) -> StdResult<Self::DItem, BoxedError> {
|
||||||
let (key_id_bytes, action_bytes) = try_split_array_at(bytes).unwrap();
|
let (key_id_bytes, action_bytes) = try_split_array_at(bytes).ok_or(SliceTooShortError)?;
|
||||||
let (action_bytes, index) = match try_split_array_at(action_bytes).unwrap() {
|
let (&action_byte, index) =
|
||||||
(action, []) => (action, None),
|
match try_split_array_at(action_bytes).ok_or(SliceTooShortError)? {
|
||||||
(action, index) => (action, Some(index)),
|
([action], []) => (action, None),
|
||||||
|
([action], index) => (action, Some(index)),
|
||||||
};
|
};
|
||||||
let key_id = Uuid::from_bytes(*key_id_bytes);
|
let key_id = Uuid::from_bytes(*key_id_bytes);
|
||||||
let action = Action::from_repr(u8::from_be_bytes(*action_bytes)).unwrap();
|
let action = Action::from_repr(action_byte).ok_or(InvalidActionError { action_byte })?;
|
||||||
|
|
||||||
Ok((key_id, action, index))
|
Ok((key_id, action, index))
|
||||||
}
|
}
|
||||||
@ -326,6 +328,16 @@ impl<'a> milli::heed::BytesEncode<'a> for KeyIdActionCodec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Error, Debug)]
|
||||||
|
#[error("the slice is too short")]
|
||||||
|
pub struct SliceTooShortError;
|
||||||
|
|
||||||
|
#[derive(Error, Debug)]
|
||||||
|
#[error("cannot construct a valid Action from {action_byte}")]
|
||||||
|
pub struct InvalidActionError {
|
||||||
|
pub action_byte: u8,
|
||||||
|
}
|
||||||
|
|
||||||
pub fn generate_key_as_hexa(uid: Uuid, master_key: &[u8]) -> String {
|
pub fn generate_key_as_hexa(uid: Uuid, master_key: &[u8]) -> String {
|
||||||
// format uid as hyphenated allowing user to generate their own keys.
|
// format uid as hyphenated allowing user to generate their own keys.
|
||||||
let mut uid_buffer = [0; Hyphenated::LENGTH];
|
let mut uid_buffer = [0; Hyphenated::LENGTH];
|
||||||
|
Loading…
Reference in New Issue
Block a user