cassandra_protocol/types/
map.rs

1use std::collections::HashMap;
2use std::net::IpAddr;
3use time::PrimitiveDateTime;
4use uuid::Uuid;
5
6use crate::error::{Error, Result};
7use crate::frame::message_result::{ColType, ColTypeOption, ColTypeOptionValue};
8use crate::frame::Version;
9use crate::types::blob::Blob;
10use crate::types::data_serialization_types::*;
11use crate::types::decimal::Decimal;
12use crate::types::list::List;
13use crate::types::tuple::Tuple;
14use crate::types::udt::Udt;
15use crate::types::{AsRust, AsRustType, CBytes};
16use num_bigint::BigInt;
17
18#[derive(Debug)]
19pub struct Map {
20    metadata: ColTypeOption,
21    data: Vec<(CBytes, CBytes)>,
22    protocol_version: Version,
23}
24
25impl Map {
26    /// Creates new `Map` using the provided data and key and value types.
27    pub fn new(data: Vec<(CBytes, CBytes)>, meta: ColTypeOption, protocol_version: Version) -> Map {
28        Map {
29            metadata: meta,
30            data,
31            protocol_version,
32        }
33    }
34}
35
36impl AsRust for Map {}
37
38// Generate `AsRustType` implementations for all kinds of map types.
39// The macro `map_as_rust!` takes the key and value types as lists of token trees.
40// This is needed because `as_rust_type!` is called by `map_as_rust!`.
41// In order to distinguish the key and value types, they are enclosed by curly braces.
42
43map_as_rust!({ Blob }, { Blob });
44map_as_rust!({ Blob }, { String });
45map_as_rust!({ Blob }, { bool });
46map_as_rust!({ Blob }, { i64 });
47map_as_rust!({ Blob }, { i32 });
48map_as_rust!({ Blob }, { i16 });
49map_as_rust!({ Blob }, { i8 });
50map_as_rust!({ Blob }, { f64 });
51map_as_rust!({ Blob }, { f32 });
52map_as_rust!({ Blob }, { IpAddr });
53map_as_rust!({ Blob }, { Uuid });
54map_as_rust!({ Blob }, { PrimitiveDateTime });
55map_as_rust!({ Blob }, { List });
56map_as_rust!({ Blob }, { Map });
57map_as_rust!({ Blob }, { Udt });
58map_as_rust!({ Blob }, { Tuple });
59map_as_rust!({ Blob }, { Decimal });
60map_as_rust!({ Blob }, { BigInt });
61
62map_as_rust!({ String }, { Blob });
63map_as_rust!({ String }, { String });
64map_as_rust!({ String }, { bool });
65map_as_rust!({ String }, { i64 });
66map_as_rust!({ String }, { i32 });
67map_as_rust!({ String }, { i16 });
68map_as_rust!({ String }, { i8 });
69map_as_rust!({ String }, { f64 });
70map_as_rust!({ String }, { f32 });
71map_as_rust!({ String }, { IpAddr });
72map_as_rust!({ String }, { Uuid });
73map_as_rust!({ String }, { PrimitiveDateTime });
74map_as_rust!({ String }, { List });
75map_as_rust!({ String }, { Map });
76map_as_rust!({ String }, { Udt });
77map_as_rust!({ String }, { Tuple });
78map_as_rust!({ String }, { Decimal });
79map_as_rust!({ String }, { BigInt });
80
81map_as_rust!({ bool }, { Blob });
82map_as_rust!({ bool }, { String });
83map_as_rust!({ bool }, { bool });
84map_as_rust!({ bool }, { i64 });
85map_as_rust!({ bool }, { i32 });
86map_as_rust!({ bool }, { i16 });
87map_as_rust!({ bool }, { i8 });
88map_as_rust!({ bool }, { f64 });
89map_as_rust!({ bool }, { f32 });
90map_as_rust!({ bool }, { IpAddr });
91map_as_rust!({ bool }, { Uuid });
92map_as_rust!({ bool }, { PrimitiveDateTime });
93map_as_rust!({ bool }, { List });
94map_as_rust!({ bool }, { Map });
95map_as_rust!({ bool }, { Udt });
96map_as_rust!({ bool }, { Tuple });
97map_as_rust!({ bool }, { Decimal });
98map_as_rust!({ bool }, { BigInt });
99
100map_as_rust!({ i64 }, { Blob });
101map_as_rust!({ i64 }, { String });
102map_as_rust!({ i64 }, { bool });
103map_as_rust!({ i64 }, { i64 });
104map_as_rust!({ i64 }, { i32 });
105map_as_rust!({ i64 }, { i16 });
106map_as_rust!({ i64 }, { i8 });
107map_as_rust!({ i64 }, { f64 });
108map_as_rust!({ i64 }, { f32 });
109map_as_rust!({ i64 }, { IpAddr });
110map_as_rust!({ i64 }, { Uuid });
111map_as_rust!({ i64 }, { PrimitiveDateTime });
112map_as_rust!({ i64 }, { List });
113map_as_rust!({ i64 }, { Map });
114map_as_rust!({ i64 }, { Udt });
115map_as_rust!({ i64 }, { Tuple });
116map_as_rust!({ i64 }, { Decimal });
117map_as_rust!({ i64 }, { BigInt });
118
119map_as_rust!({ i32 }, { Blob });
120map_as_rust!({ i32 }, { String });
121map_as_rust!({ i32 }, { bool });
122map_as_rust!({ i32 }, { i64 });
123map_as_rust!({ i32 }, { i32 });
124map_as_rust!({ i32 }, { i16 });
125map_as_rust!({ i32 }, { i8 });
126map_as_rust!({ i32 }, { f64 });
127map_as_rust!({ i32 }, { f32 });
128map_as_rust!({ i32 }, { IpAddr });
129map_as_rust!({ i32 }, { Uuid });
130map_as_rust!({ i32 }, { PrimitiveDateTime });
131map_as_rust!({ i32 }, { List });
132map_as_rust!({ i32 }, { Map });
133map_as_rust!({ i32 }, { Udt });
134map_as_rust!({ i32 }, { Tuple });
135map_as_rust!({ i32 }, { Decimal });
136map_as_rust!({ i32 }, { BigInt });
137
138map_as_rust!({ i16 }, { Blob });
139map_as_rust!({ i16 }, { String });
140map_as_rust!({ i16 }, { bool });
141map_as_rust!({ i16 }, { i64 });
142map_as_rust!({ i16 }, { i32 });
143map_as_rust!({ i16 }, { i16 });
144map_as_rust!({ i16 }, { i8 });
145map_as_rust!({ i16 }, { f64 });
146map_as_rust!({ i16 }, { f32 });
147map_as_rust!({ i16 }, { IpAddr });
148map_as_rust!({ i16 }, { Uuid });
149map_as_rust!({ i16 }, { PrimitiveDateTime });
150map_as_rust!({ i16 }, { List });
151map_as_rust!({ i16 }, { Map });
152map_as_rust!({ i16 }, { Udt });
153map_as_rust!({ i16 }, { Tuple });
154map_as_rust!({ i16 }, { Decimal });
155map_as_rust!({ i16 }, { BigInt });
156
157map_as_rust!({ i8 }, { Blob });
158map_as_rust!({ i8 }, { String });
159map_as_rust!({ i8 }, { bool });
160map_as_rust!({ i8 }, { i64 });
161map_as_rust!({ i8 }, { i32 });
162map_as_rust!({ i8 }, { i16 });
163map_as_rust!({ i8 }, { i8 });
164map_as_rust!({ i8 }, { f64 });
165map_as_rust!({ i8 }, { f32 });
166map_as_rust!({ i8 }, { IpAddr });
167map_as_rust!({ i8 }, { Uuid });
168map_as_rust!({ i8 }, { PrimitiveDateTime });
169map_as_rust!({ i8 }, { List });
170map_as_rust!({ i8 }, { Map });
171map_as_rust!({ i8 }, { Udt });
172map_as_rust!({ i8 }, { Tuple });
173map_as_rust!({ i8 }, { Decimal });
174map_as_rust!({ i8 }, { BigInt });
175
176map_as_rust!({ IpAddr }, { Blob });
177map_as_rust!({ IpAddr }, { String });
178map_as_rust!({ IpAddr }, { bool });
179map_as_rust!({ IpAddr }, { i64 });
180map_as_rust!({ IpAddr }, { i32 });
181map_as_rust!({ IpAddr }, { i16 });
182map_as_rust!({ IpAddr }, { i8 });
183map_as_rust!({ IpAddr }, { f64 });
184map_as_rust!({ IpAddr }, { f32 });
185map_as_rust!({ IpAddr }, { IpAddr });
186map_as_rust!({ IpAddr }, { Uuid });
187map_as_rust!({ IpAddr }, { PrimitiveDateTime });
188map_as_rust!({ IpAddr }, { List });
189map_as_rust!({ IpAddr }, { Map });
190map_as_rust!({ IpAddr }, { Udt });
191map_as_rust!({ IpAddr }, { Tuple });
192map_as_rust!({ IpAddr }, { Decimal });
193map_as_rust!({ IpAddr }, { BigInt });
194
195map_as_rust!({ Uuid }, { Blob });
196map_as_rust!({ Uuid }, { String });
197map_as_rust!({ Uuid }, { bool });
198map_as_rust!({ Uuid }, { i64 });
199map_as_rust!({ Uuid }, { i32 });
200map_as_rust!({ Uuid }, { i16 });
201map_as_rust!({ Uuid }, { i8 });
202map_as_rust!({ Uuid }, { f64 });
203map_as_rust!({ Uuid }, { f32 });
204map_as_rust!({ Uuid }, { IpAddr });
205map_as_rust!({ Uuid }, { Uuid });
206map_as_rust!({ Uuid }, { PrimitiveDateTime });
207map_as_rust!({ Uuid }, { List });
208map_as_rust!({ Uuid }, { Map });
209map_as_rust!({ Uuid }, { Udt });
210map_as_rust!({ Uuid }, { Tuple });
211map_as_rust!({ Uuid }, { Decimal });
212map_as_rust!({ Uuid }, { BigInt });
213
214map_as_rust!({ PrimitiveDateTime }, { Blob });
215map_as_rust!({ PrimitiveDateTime }, { String });
216map_as_rust!({ PrimitiveDateTime }, { bool });
217map_as_rust!({ PrimitiveDateTime }, { i64 });
218map_as_rust!({ PrimitiveDateTime }, { i32 });
219map_as_rust!({ PrimitiveDateTime }, { i16 });
220map_as_rust!({ PrimitiveDateTime }, { i8 });
221map_as_rust!({ PrimitiveDateTime }, { f64 });
222map_as_rust!({ PrimitiveDateTime }, { f32 });
223map_as_rust!({ PrimitiveDateTime }, { IpAddr });
224map_as_rust!({ PrimitiveDateTime }, { Uuid });
225map_as_rust!({ PrimitiveDateTime }, { PrimitiveDateTime });
226map_as_rust!({ PrimitiveDateTime }, { List });
227map_as_rust!({ PrimitiveDateTime }, { Map });
228map_as_rust!({ PrimitiveDateTime }, { Udt });
229map_as_rust!({ PrimitiveDateTime }, { Tuple });
230map_as_rust!({ PrimitiveDateTime }, { Decimal });
231map_as_rust!({ PrimitiveDateTime }, { BigInt });
232
233map_as_rust!({ Tuple }, { Blob });
234map_as_rust!({ Tuple }, { String });
235map_as_rust!({ Tuple }, { bool });
236map_as_rust!({ Tuple }, { i64 });
237map_as_rust!({ Tuple }, { i32 });
238map_as_rust!({ Tuple }, { i16 });
239map_as_rust!({ Tuple }, { i8 });
240map_as_rust!({ Tuple }, { f64 });
241map_as_rust!({ Tuple }, { f32 });
242map_as_rust!({ Tuple }, { IpAddr });
243map_as_rust!({ Tuple }, { Uuid });
244map_as_rust!({ Tuple }, { PrimitiveDateTime });
245map_as_rust!({ Tuple }, { List });
246map_as_rust!({ Tuple }, { Map });
247map_as_rust!({ Tuple }, { Udt });
248map_as_rust!({ Tuple }, { Tuple });
249map_as_rust!({ Tuple }, { Decimal });
250map_as_rust!({ Tuple }, { BigInt });
251
252map_as_cassandra_type!();