index_term.rs 820 B

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