summa_core/proto_traits/
merge_policy.rs

1use std::sync::Arc;
2
3use summa_proto::proto;
4
5use crate::proto_traits::Wrapper;
6
7impl From<Wrapper<Option<proto::MergePolicy>>> for Arc<dyn tantivy::merge_policy::MergePolicy> {
8    fn from(merge_policy: Wrapper<Option<proto::MergePolicy>>) -> Self {
9        match merge_policy.into_inner() {
10            None | Some(proto::MergePolicy { merge_policy: None }) => Arc::new(tantivy::merge_policy::NoMergePolicy),
11            Some(proto::MergePolicy {
12                merge_policy: Some(proto::merge_policy::MergePolicy::Log(c)),
13            }) => {
14                if c.is_frozen {
15                    Arc::new(crate::components::merge_policies::LogMergePolicy::frozen())
16                } else {
17                    Arc::<crate::components::merge_policies::LogMergePolicy>::default()
18                }
19            }
20            Some(proto::MergePolicy {
21                merge_policy: Some(proto::merge_policy::MergePolicy::Temporal(c)),
22            }) => Arc::new(crate::components::merge_policies::TemporalMergePolicy::new(c.merge_older_then_secs)),
23        }
24    }
25}