index_term.rs 875 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. use serde_derive::{Deserialize, Serialize};
  2. use crate::log_array::LogEntry;
  3. use crate::{Index, Term};
  4. #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
  5. pub struct IndexTerm {
  6. pub index: Index,
  7. pub term: Term,
  8. }
  9. impl<C> From<&LogEntry<C>> for IndexTerm {
  10. fn from(entry: &LogEntry<C>) -> Self {
  11. Self {
  12. index: entry.index,
  13. term: entry.term,
  14. }
  15. }
  16. }
  17. impl From<IndexTerm> for (Index, Term) {
  18. fn from(index_term: IndexTerm) -> Self {
  19. index_term.unpack()
  20. }
  21. }
  22. impl From<(Index, Term)> for IndexTerm {
  23. fn from(index_term: (Index, Term)) -> Self {
  24. Self::pack(index_term.0, index_term.1)
  25. }
  26. }
  27. impl IndexTerm {
  28. pub fn unpack(&self) -> (Index, Term) {
  29. (self.index, self.term)
  30. }
  31. pub fn pack(index: Index, term: Term) -> Self {
  32. Self { index, term }
  33. }
  34. }