Skip to main content

couchbase_core/memdx/
hello_feature.rs

1/*
2 *
3 *  * Copyright (c) 2025 Couchbase, Inc.
4 *  *
5 *  * Licensed under the Apache License, Version 2.0 (the "License");
6 *  * you may not use this file except in compliance with the License.
7 *  * You may obtain a copy of the License at
8 *  *
9 *  *    http://www.apache.org/licenses/LICENSE-2.0
10 *  *
11 *  * Unless required by applicable law or agreed to in writing, software
12 *  * distributed under the License is distributed on an "AS IS" BASIS,
13 *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  * See the License for the specific language governing permissions and
15 *  * limitations under the License.
16 *
17 */
18
19#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
20#[non_exhaustive]
21pub enum HelloFeature {
22    DataType,
23    Tls,
24    TCPNoDelay,
25    SeqNo,
26    TCPDelay,
27    Xattr,
28    Xerror,
29    SelectBucket,
30    Snappy,
31    SnappyEverywhere,
32    Json,
33    Duplex,
34    ClusterMapNotif,
35    UnorderedExec,
36    Durations,
37    AltRequests,
38    SyncReplication,
39    Collections,
40    PreserveExpiry,
41    PointInTimeRecovery,
42    CreateAsDeleted,
43    ReplaceBodyWithXattr,
44    ClusterMapKnownVersion,
45    DedupeNotMyVbucketClustermap,
46    ClusterMapChangeNotificationBrief,
47    Unknown(u16),
48}
49
50impl From<HelloFeature> for u16 {
51    fn from(value: HelloFeature) -> u16 {
52        match value {
53            HelloFeature::DataType => 0x01,
54            HelloFeature::Tls => 0x02,
55            HelloFeature::TCPNoDelay => 0x03,
56            HelloFeature::SeqNo => 0x04,
57            HelloFeature::TCPDelay => 0x05,
58            HelloFeature::Xattr => 0x06,
59            HelloFeature::Xerror => 0x07,
60            HelloFeature::SelectBucket => 0x08,
61            HelloFeature::Snappy => 0x0a,
62            HelloFeature::Json => 0x0b,
63            HelloFeature::Duplex => 0x0c,
64            HelloFeature::ClusterMapNotif => 0x0d,
65            HelloFeature::UnorderedExec => 0x0e,
66            HelloFeature::Durations => 0x0f,
67            HelloFeature::AltRequests => 0x10,
68            HelloFeature::SyncReplication => 0x11,
69            HelloFeature::Collections => 0x12,
70            HelloFeature::SnappyEverywhere => 0x13,
71            HelloFeature::PreserveExpiry => 0x14,
72            HelloFeature::PointInTimeRecovery => 0x16,
73            HelloFeature::CreateAsDeleted => 0x17,
74            HelloFeature::ReplaceBodyWithXattr => 0x19,
75            HelloFeature::ClusterMapKnownVersion => 0x1d,
76            HelloFeature::DedupeNotMyVbucketClustermap => 0x1e,
77            HelloFeature::ClusterMapChangeNotificationBrief => 0x1f,
78            HelloFeature::Unknown(code) => code,
79        }
80    }
81}
82
83impl From<u16> for HelloFeature {
84    fn from(value: u16) -> Self {
85        match value {
86            0x01 => HelloFeature::DataType,
87            0x02 => HelloFeature::Tls,
88            0x03 => HelloFeature::TCPNoDelay,
89            0x04 => HelloFeature::SeqNo,
90            0x05 => HelloFeature::TCPDelay,
91            0x06 => HelloFeature::Xattr,
92            0x07 => HelloFeature::Xerror,
93            0x08 => HelloFeature::SelectBucket,
94            0x0a => HelloFeature::Snappy,
95            0x0b => HelloFeature::Json,
96            0x0c => HelloFeature::Duplex,
97            0x0d => HelloFeature::ClusterMapNotif,
98            0x0e => HelloFeature::UnorderedExec,
99            0x0f => HelloFeature::Durations,
100            0x10 => HelloFeature::AltRequests,
101            0x11 => HelloFeature::SyncReplication,
102            0x12 => HelloFeature::Collections,
103            0x13 => HelloFeature::SnappyEverywhere,
104            0x14 => HelloFeature::PreserveExpiry,
105            0x16 => HelloFeature::PointInTimeRecovery,
106            0x17 => HelloFeature::CreateAsDeleted,
107            0x19 => HelloFeature::ReplaceBodyWithXattr,
108            0x1d => HelloFeature::ClusterMapKnownVersion,
109            0x1e => HelloFeature::DedupeNotMyVbucketClustermap,
110            0x1f => HelloFeature::ClusterMapChangeNotificationBrief,
111            code => HelloFeature::Unknown(code),
112        }
113    }
114}