use arrow_flight::PutResult;
use serde::{Deserialize, Serialize};
use snafu::ResultExt;
use crate::error;
#[derive(Serialize, Deserialize)]
pub struct DoPutMetadata {
request_id: i64,
}
impl DoPutMetadata {
pub fn new(request_id: i64) -> Self {
Self { request_id }
}
pub fn request_id(&self) -> i64 {
self.request_id
}
}
#[derive(Serialize, Deserialize, Debug)]
pub struct DoPutResponse {
request_id: i64,
affected_rows: usize,
}
impl DoPutResponse {
pub fn new(request_id: i64, affected_rows: usize) -> Self {
Self {
request_id,
affected_rows,
}
}
pub fn request_id(&self) -> i64 {
self.request_id
}
pub fn affected_rows(&self) -> usize {
self.affected_rows
}
}
impl TryFrom<PutResult> for DoPutResponse {
type Error = error::Error;
fn try_from(value: PutResult) -> Result<Self, Self::Error> {
serde_json::from_slice(&value.app_metadata).context(error::SerdeJsonSnafu)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serde_do_put_metadata() {
let serialized = r#"{"request_id":42}"#;
let metadata = serde_json::from_str::<DoPutMetadata>(serialized).unwrap();
assert_eq!(metadata.request_id(), 42);
}
#[test]
fn test_serde_do_put_response() {
let x = DoPutResponse::new(42, 88);
let serialized = serde_json::to_string(&x).unwrap();
assert_eq!(serialized, r#"{"request_id":42,"affected_rows":88}"#);
}
}