A Rust wrapper around PocketBase Rest API's REST API.
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 105 lines 4.4 kB view raw
1//! Various errors module. 2 3use core::fmt; 4use std::collections::HashMap; 5 6use serde::Deserialize; 7use thiserror::Error; 8 9pub use crate::records::auth::auth_with_password::AuthenticationError; 10pub use crate::records::auth::impersonate::ImpersonateError; 11pub use crate::records::crud::create::CreateError; 12pub use crate::records::crud::update::UpdateError; 13 14/// This error represents the error returned by the `PocketBase` 15/// instance in case of a 400 error. 16#[derive(Deserialize, Debug)] 17pub struct BadRequestResponse { 18 /// HTTP Status Code. 19 pub status: u16, 20 /// Description from given by `PocketBase` about why the error happened. 21 pub message: String, 22 /// A list of fields that caused the error. 23 pub data: HashMap<String, BadRequestField>, 24} 25 26/// Represents an instance of one of the errors that could be returned on a bad request. 27/// 28/// This struct holds detailed information about a single validation error, 29/// including the field name, error code, and a user-friendly message. 30#[derive(Deserialize, Debug)] 31pub struct BadRequestError { 32 /// Name of the field. 33 pub name: String, 34 /// Error code. 35 pub code: String, 36 /// More details about the error. 37 pub message: String, 38} 39 40impl fmt::Display for BadRequestError { 41 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 42 write!(f, "{}: {} {}", self.name, self.code, self.message) 43 } 44} 45 46/// Represents one of the fields that caused the Bad Request error. 47#[derive(Deserialize, Debug)] 48pub struct BadRequestField { 49 /// Error code *(example: `validation_required`)*. 50 pub code: String, 51 /// A text explaining in a readable way what this error is. 52 pub message: String, 53} 54 55/// Represents errors when interacting with the `PocketBase` API. 56/// 57/// This enum provides a set of error types that may occur during 58/// API requests, each indicating a specific issue encountered. 59#[derive(Error, Debug)] 60pub enum RequestError { 61 /// Communication with the `PocketBase` API was successful, 62 /// but returned a [400 Bad Request]("https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400") HTTP error response. 63 /// 64 /// Your request may be missing fields or its content doesn't match what `PocketBase` expects to receive. 65 #[error("Bad Request: Something went wrong while processing your request. {0}")] 66 BadRequest(String), 67 /// Communication with the `PocketBase` API was successful, 68 /// but returned a [401 Unauthorized]("https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401") HTTP error response. 69 /// 70 /// The request may require an Authorization Token. 71 #[error("Unauthorized: The request may require an Authorization Token.")] 72 Unauthorized, 73 /// Communication with the `PocketBase` API was successful, 74 /// but returned a [403 Forbidden]("https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403") HTTP error response. 75 /// 76 /// The authenticated user may not have permissions for this interaction. 77 #[error("Forbidden: The authenticated user may not have permissions for this interaction.")] 78 Forbidden, 79 /// Communication with the `PocketBase` API was successful, 80 /// but returned a [404 Not Found]("https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404") HTTP error response. 81 #[error("Not Found: The requested resource could not be found.")] 82 NotFound, 83 /// The response could not be parsed into the expected data structure. 84 #[error( 85 "Parse Error: Could not parse response into the expected data structure. It usually means that there is a missmatch between the provided Generic Type Parameter and your Collection definition. - {0}" 86 )] 87 ParseError(String), 88 /// The `PocketBase` API interaction timed out. It may be offline. 89 #[error( 90 "Unreachable: The PocketBase API interaction timed out, or the service may be offline." 91 )] 92 Unreachable, 93 /// Too many requests were sent to the API. 94 /// 95 /// The server is rate limiting requests. Wait before retrying. 96 #[error( 97 "Too Many Requests: The server is rate limiting requests. Please wait before retrying." 98 )] 99 TooManyRequests, 100 /// Unhandled error. 101 /// 102 /// Usually emitted when something unexpected happened, and isn't handled correctly by this crate. 103 #[error("Unhandled Error: An unexpected error occurred.")] 104 Unhandled, 105}