1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Copyright 2022 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! Builtins to parse and convert units
use ;
use Config;
use Serialize;
/// `UsizeOrFloat` is used to give back either type because per Go OPA, `parse`
/// returns usize _or_ float, and this allows to return multiple types.
/// Converts strings like "10G", "5K", "4M", "1500m" and the like into a number.
/// This number can be a non-integer, such as 1.5, 0.22, etc. Supports standard
/// metric decimal and binary SI units (e.g., K, Ki, M, Mi, G, Gi etc.) m, K, M,
/// G, T, P, and E are treated as decimal units and Ki, Mi, Gi, Ti, Pi, and Ei
/// are treated as binary units.
///
/// Note that 'm' and 'M' are case-sensitive, to allow distinguishing between
/// "milli" and "mega" units respectively. Other units are case-insensitive.
/// Converts strings like "10GB", "5K", "4mb" into an integer number of bytes.
/// Supports standard byte units (e.g., KB, KiB, etc.) KB, MB, GB, and TB are
/// treated as decimal units and KiB, MiB, GiB, and TiB are treated as binary
/// units. The bytes symbol (b/B) in the unit is optional and omitting it wil
/// give the same result (e.g. Mi and MiB).