24 | import UUID.Support.C
31 | compare' : UUID -> UUID -> Ordering
32 | compare' = flip compare 0 .: prim__uuidCompare `on` ptr
34 | export Eq UUID where x == y = compare' x y == EQ
35 | export Ord UUID where compare = compare'
37 | allocUUID : IO GCAnyPtr
38 | allocUUID = onCollectAny !(malloc $
cast sizeOfUUID_t) free
40 | enumerate : Vect n a -> Vect n (Nat, a)
43 | aux : Nat -> Vect m a -> Vect m (Nat, a)
45 | aux k (x :: xs) = (k, x) :: aux (S k) xs
49 | fromBytes : Vect 16 Bits8 -> UUID
51 | unsafePerformIO $
do
53 | traverse_ (\(i, x) => primIO $
prim__uuidSetByte uuid (cast i) x) $
enumerate bytes
63 | uuid1 : IO (UUID, Bool)
66 | ok <- primIO $
prim__uuidGenerateTimeSafe uuid
67 | pure (MkUUID uuid, ok == 0)
73 | uuid3 : (namespace' : UUID) -> (name : String) -> UUID
74 | uuid3 ns name = unsafePerformIO $
do
76 | primIO $
prim__uuidGenerateMD5 uuid ns.ptr name (cast $
length name)
89 | primIO $
prim__uuidGenerateRandom uuid
96 | uuid5 : (namespace' : UUID) -> (name : String) -> UUID
97 | uuid5 ns name = unsafePerformIO $
do
99 | primIO $
prim__uuidGenerateSHA1 uuid ns.ptr name (cast $
length name)
104 | parse : String -> Maybe UUID
105 | parse str = unsafePerformIO $
do
107 | ok <- primIO $
prim__uuidParse str uuid
108 | pure $
if ok == 0 then Just (MkUUID uuid) else Nothing
112 | unparse : UUID -> String
113 | unparse uuid = unsafePerformIO $
primIO $
prim__uuidUnparse uuid.ptr