diff --git a/sfw-provider/sfw-provider-requests/src/responses.rs b/sfw-provider/sfw-provider-requests/src/responses.rs index 4135ed06e4..47163ef022 100644 --- a/sfw-provider/sfw-provider-requests/src/responses.rs +++ b/sfw-provider/sfw-provider-requests/src/responses.rs @@ -26,6 +26,10 @@ pub struct RegisterResponse { pub auth_token: AuthToken, } +pub struct ErrorResponse { + pub message: String, +} + impl PullResponse { pub fn new(messages: Vec>) -> Self { PullResponse { messages } @@ -38,6 +42,14 @@ impl RegisterResponse { } } +impl ErrorResponse { + pub fn new>(message: S) -> Self { + ErrorResponse { + message: message.into(), + } + } +} + // TODO: This should go into some kind of utils module/crate fn read_be_u16(input: &mut &[u8]) -> u16 { let (int_bytes, rest) = input.split_at(std::mem::size_of::()); @@ -126,6 +138,19 @@ impl ProviderResponse for RegisterResponse { } } +impl ProviderResponse for ErrorResponse { + fn to_bytes(&self) -> Vec { + self.message.clone().into_bytes() + } + + fn from_bytes(bytes: &[u8]) -> Result { + match String::from_utf8(bytes.to_vec()) { + Err(_) => Err(ProviderResponseError::UnmarshalError), + Ok(message) => Ok(ErrorResponse { message }), + } + } +} + #[cfg(test)] mod creating_pull_response { use super::*;