diff --git a/picolib/lib.rs b/picolib/lib.rs index a21c4d65e1a04c3265e360601056b4691c3cfe4a..940f2f080ba2dd4ebf8fd6435bb96554b5e78216 100644 --- a/picolib/lib.rs +++ b/picolib/lib.rs @@ -150,7 +150,7 @@ fn raft_propose(msg: Message) { let raft_ref = stash.raft_node(); let raft_node = raft_ref.as_ref().expect("Picodata not running yet"); tlog!(Debug, "propose {:?} ................................", msg); - raft_node.propose(msg.into()); + raft_node.propose(&msg); tlog!(Debug, ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"); } diff --git a/picolib/message.rs b/picolib/message.rs index 3be654be4cd442c4271f650a670d086448688381..a853e918278288160bd28c49821c8afe49ae766f 100644 --- a/picolib/message.rs +++ b/picolib/message.rs @@ -27,8 +27,8 @@ impl TryFrom<&[u8]> for Message { } } -impl From<Message> for Vec<u8> { - fn from(msg: Message) -> Vec<u8> { +impl From<&Message> for Vec<u8> { + fn from(msg: &Message) -> Vec<u8> { if matches!(msg, Message::Empty) { return Vec::new(); } @@ -82,7 +82,7 @@ inventory::submit!(crate::InnerTest { let msg = Message::EvalLua { code: "os.exit()".to_owned(), }; - let buf: Vec<u8> = msg.clone().into(); + let buf: Vec<u8> = Vec::from(&msg); assert_eq!( ("eval_lua", "os.exit()"), rmp_serde::from_read_ref(&buf).unwrap() diff --git a/picolib/traft/node.rs b/picolib/traft/node.rs index bfae87afda16eec981bf0e6fd3aad57940ad541a..47c02aba40b3a0c5dfa2c9fcd6e6e6b1ff0a7f96 100644 --- a/picolib/traft/node.rs +++ b/picolib/traft/node.rs @@ -63,12 +63,14 @@ impl Node { }) } - pub fn propose(&self, data: Vec<u8>) { - self.inbox.send(Request::Propose(data)).unwrap(); + pub fn propose<T: Into<Vec<u8>>>(&self, data: T) { + let req = Request::Propose(data.into()); + self.inbox.send(req).unwrap(); } pub fn step(&self, msg: raft::Message) { - self.inbox.send(Request::Step(msg)).unwrap(); + let req = Request::Step(msg); + self.inbox.send(req).unwrap(); } } diff --git a/picolib/traft/row/entry.rs b/picolib/traft/row/entry.rs index 3b3f528d81578e87e36de2814a91216d3ec5d5b6..881b6511f3429d746006380e8d9542e2eb51ca4b 100644 --- a/picolib/traft/row/entry.rs +++ b/picolib/traft/row/entry.rs @@ -2,7 +2,6 @@ use ::raft::prelude as raft; use serde::Deserialize; use serde::Serialize; use std::convert::TryFrom; -use std::convert::TryInto; use crate::Message; @@ -15,15 +14,15 @@ pub struct Entry { } impl ::tarantool::tuple::AsTuple for Entry {} -impl TryFrom<&raft::Entry> for self::Entry { +impl TryFrom<raft::Entry> for self::Entry { type Error = rmp_serde::decode::Error; - fn try_from(e: &raft::Entry) -> Result<Self, Self::Error> { + fn try_from(e: raft::Entry) -> Result<Self, Self::Error> { Ok(Self { entry_type: format!("{:?}", e.get_entry_type()), index: e.get_index(), term: e.get_term(), - msg: e.get_data().try_into()?, + msg: Message::try_from(e.get_data())?, }) } } @@ -40,7 +39,7 @@ impl From<self::Entry> for raft::Entry { ret.set_entry_type(entry_type); ret.set_index(row.index); ret.set_term(row.term); - let bytes: Vec<u8> = Vec::from(row.msg); + let bytes: Vec<u8> = Vec::from(&row.msg); ret.set_data(bytes.into()); ret @@ -49,7 +48,7 @@ impl From<self::Entry> for raft::Entry { impl Default for Entry { fn default() -> Self { - Self::try_from(&raft::Entry::default()).unwrap() + Self::try_from(raft::Entry::default()).expect("that's a bug") } } diff --git a/picolib/traft/storage.rs b/picolib/traft/storage.rs index 08977720653d0689b4daf50f17b4fb8381b9751f..9340e676ce1c8cfac7d481a957ab7d3021138588 100644 --- a/picolib/traft/storage.rs +++ b/picolib/traft/storage.rs @@ -131,7 +131,7 @@ impl Storage { if row.index >= high { break; } - ret.push(row.into()); + ret.push(raft::Entry::from(row)); } ret @@ -139,8 +139,8 @@ impl Storage { pub fn persist_entries(entries: &Vec<raft::Entry>) { let mut space = Space::find(SPACE_RAFT_LOG).unwrap(); - for entry in entries { - let row = row::Entry::try_from(entry).unwrap(); + for e in entries { + let row = row::Entry::try_from(e.clone()).unwrap(); space.insert(&row).unwrap(); } }