~toastal/klossi

~toastal/klossi/ncl/folks.ncl
 ..
0 {
1 Address = std.contract.from_predicate (std.string.is_match "^\\S+@\\S+\\.\\S+$"),
2 URI = std.contract.from_predicate (std.string.is_match "[a-zA-Z][a-zA-Z\\d+\\-.]*://\\S+"),
3 PGPLongKeyID = std.contract.from_predicate (std.string.is_match "\\w+/[a-fA-F0-9]{16}"),
4 PGPFingerPrint = std.contract.from_predicate (std.string.is_match "([a-fA-F0-9]{4} *){10}"),
5 PGPKey = {
6 long-key-id | PGPLongKeyID,
7 fingerprint | PGPFingerPrint,
8 },
9 Someone = {
10 name
11 | std.string.NonEmpty,
12 aliases
13 | doc "Other names you may go by"
14 | std.array.NonEmpty
15 | optional,
16 email
17 | Address
18 | optional,
19 xmpp
20 | Address
21 | optional,
22 uri
23 | doc "Hyperlink to website"
24 | URI
25 | optional,
26 pronouns
27 | Array std.string.NonEmpty
28 | std.array.NonEmpty
29 | optional,
30 pgp_keys
31 | Array PGPKey
32 | std.array.NonEmpty
33 | optional,
34 },
35 Folks = Array Someone,
36 }