generated from amazon-archives/__template_Apache-2.0
-
Notifications
You must be signed in to change notification settings - Fork 33
Expand file tree
/
Copy pathExtFun.lean
More file actions
96 lines (81 loc) · 3.23 KB
/
ExtFun.lean
File metadata and controls
96 lines (81 loc) · 3.23 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/-
Copyright Cedar Contributors
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
https://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.
-/
module
public import Cedar.Spec.Value
/-! This file defines Cedar extension functions. -/
namespace Cedar.Spec
open Cedar.Spec.Ext
open Option
----- Definitions -----
public inductive ExtFun where
| decimal ----- Decimal functions -----
| lessThan
| lessThanOrEqual
| greaterThan
| greaterThanOrEqual
| ip ----- IpAddr functions -----
| isIpv4
| isIpv6
| isLoopback
| isMulticast
| isInRange
| datetime ----- Datetime functions -----
| duration
| offset
| durationSince
| toDate
| toTime
| toMilliseconds
| toSeconds
| toMinutes
| toHours
| toDays
@[expose]
public def res {α} [Coe α Ext] : Option α → Result Value
| some v => .ok v
| none => .error .extensionError
@[expose]
public def call : ExtFun → List Value → Result Value
| .decimal, [.prim (.string s)] => res (Decimal.decimal s)
| .lessThan,
[.ext (.decimal d₁), .ext (.decimal d₂)] => .ok (d₁ < d₂ : Bool)
| .lessThanOrEqual,
[.ext (.decimal d₁), .ext (.decimal d₂)] => .ok (d₁ ≤ d₂ : Bool)
| .greaterThan,
[.ext (.decimal d₁), .ext (.decimal d₂)] => .ok (d₁ > d₂ : Bool)
| .greaterThanOrEqual,
[.ext (.decimal d₁), .ext (.decimal d₂)] => .ok (d₁ ≥ d₂ : Bool)
| .ip, [.prim (.string s)] => res (IPAddr.ip s)
| .isIpv4, [.ext (.ipaddr a)] => .ok a.isV4
| .isIpv6, [.ext (.ipaddr a)] => .ok a.isV6
| .isLoopback, [.ext (.ipaddr a)] => .ok a.isLoopback
| .isMulticast, [.ext (.ipaddr a)] => .ok a.isMulticast
| .isInRange,
[.ext (.ipaddr a₁), .ext (.ipaddr a₂)] => .ok (a₁.inRange a₂)
| .datetime, [.prim (.string s)] => res (Datetime.parse s)
| .duration, [.prim (.string s)] => res (Datetime.Duration.parse s)
| .offset,
[.ext (.datetime dt), .ext (.duration dur)] => res (dt.offset dur)
| .durationSince,
[.ext (.datetime d₁), .ext (.datetime d₂)] => res (d₁.durationSince d₂)
| .toDate, [.ext (.datetime dt)] => res (dt.toDate)
| .toTime, [.ext (.datetime dt)] => .ok dt.toTime
| .toMilliseconds, [.ext (.duration dur)] => .ok dur.toMilliseconds
| .toSeconds, [.ext (.duration dur)] => .ok dur.toSeconds
| .toMinutes, [.ext (.duration dur)] => .ok dur.toMinutes
| .toHours, [.ext (.duration dur)] => .ok dur.toHours
| .toDays , [.ext (.duration dur)] => .ok dur.toDays
| _, _ => .error .typeError
----- Derivations -----
deriving instance Repr, DecidableEq, Inhabited for ExtFun
end Cedar.Spec