0 | module Text.WebIDL.Types.Member
3 | import Derive.Prelude
4 | import Text.WebIDL.Types.Argument
5 | import Text.WebIDL.Types.Attribute
6 | import Text.WebIDL.Types.Identifier
7 | import Text.WebIDL.Types.StringLit
8 | import Text.WebIDL.Types.Type
10 | %language ElabReflection
26 | %runElab derive "Const" [Eq,Show,HasAttributes]
39 | record OperationName where
40 | constructor MkOpName
43 | %runElab derive "OperationName" [Eq,Show,HasAttributes]
50 | data Special = Getter | Setter | Deleter
52 | %runElab derive "Special" [Eq,Show,HasAttributes]
75 | name : Maybe OperationName
78 | %runElab derive "Op" [Eq,Show,HasAttributes]
81 | 0 RegularOperation : Type
82 | RegularOperation = Op ()
85 | 0 SpecialOperation : Type
86 | SpecialOperation = Op Special
90 | Operation = Op (Maybe Special)
93 | regToOp : RegularOperation -> Operation
94 | regToOp = { special := Nothing }
97 | specToOp : SpecialOperation -> Operation
98 | specToOp = { special $= Just }
109 | 0 CallbackInterfaceMember : Type
110 | CallbackInterfaceMember = NS I [Const,RegularOperation]
116 | 0 CallbackInterfaceMembers : Type
117 | CallbackInterfaceMembers = List (Attributed CallbackInterfaceMember)
127 | 0 Inheritance : Type
128 | Inheritance = Maybe Identifier
134 | data DictionaryMemberRest : Type where
135 | Required : (attrs : ExtAttributeList)
136 | -> (type : IdlType)
137 | -> (name : Identifier)
138 | -> DictionaryMemberRest
140 | Optional : (type : IdlType)
141 | -> (name : Identifier)
142 | -> (deflt : Default)
143 | -> DictionaryMemberRest
145 | %runElab derive "DictionaryMemberRest" [Eq,Show,HasAttributes]
150 | 0 DictionaryMember : Type
151 | DictionaryMember = Attributed DictionaryMemberRest
157 | 0 DictionaryMembers : Type
158 | DictionaryMembers = List DictionaryMember
165 | record Readonly a where
169 | %runElab derive "Readonly" [Eq,Show,HasAttributes]
172 | record Inherit a where
176 | %runElab derive "Inherit" [Eq,Show,HasAttributes]
186 | record AttributeName where
187 | constructor MkAttributeName
190 | %runElab derive "AttributeName" [Eq,Ord,Show,HasAttributes]
195 | record Attribute where
196 | constructor MkAttribute
197 | attrs : ExtAttributeList
199 | name : AttributeName
201 | %runElab derive "Attribute" [Eq,Show,HasAttributes]
209 | record Maplike where
210 | constructor MkMaplike
211 | fstTpe : Attributed IdlType
212 | sndTpe : Attributed IdlType
214 | %runElab derive "Maplike" [Eq,Show,HasAttributes]
217 | HasAttributes Maplike where
218 | attributes v = fst (v.fstTpe) ++ fst (v.sndTpe)
226 | record Setlike where
227 | constructor MkSetlike
228 | type : Attributed IdlType
230 | %runElab derive "Setlike" [Eq,Show,HasAttributes]
240 | 0 Stringifier : Type
241 | Stringifier = NS I [Attribute, Readonly Attribute, RegularOperation,()]
250 | 0 StaticMember : Type
251 | StaticMember = NS I [Attribute, Readonly Attribute, RegularOperation]
261 | 0 NamespaceMember : Type
262 | NamespaceMember = NS I [RegularOperation, Readonly Attribute]
268 | 0 NamespaceMembers : Type
269 | NamespaceMembers = List (Attributed NamespaceMember)
278 | record Constructor where
279 | constructor MkConstructor
280 | args : ArgumentList
282 | %runElab derive "Constructor" [Eq,Show,HasAttributes]
300 | data PartialInterfaceMember =
304 | | IStatic StaticMember
308 | | IAttrRO (Readonly Attribute)
309 | | IMapRO (Readonly Maplike)
310 | | ISetRO (Readonly Setlike)
311 | | IAttrInh (Inherit Attribute)
312 | | IIterable (Attributed IdlType) OptionalType
313 | | IAsync (Attributed IdlType) OptionalType ArgumentList
315 | %runElab derive "PartialInterfaceMember" [Eq,Show,HasAttributes]
326 | | MOp RegularOperation
329 | | MAttrRO (Readonly Attribute)
331 | %runElab derive "MixinMember" [Eq,Show,HasAttributes]
338 | 0 PartialInterfaceMembers : Type
339 | PartialInterfaceMembers = List (Attributed PartialInterfaceMember)
345 | 0 InterfaceMember : Type
346 | InterfaceMember = NS I [Constructor,PartialInterfaceMember]
353 | 0 InterfaceMembers : Type
354 | InterfaceMembers = List (Attributed InterfaceMember)
360 | 0 MixinMembers : Type
361 | MixinMembers = List (Attributed MixinMember)
367 | namespace CallbackInterfaceMember
369 | const : Attributed CallbackInterfaceMember -> Maybe Const
370 | const (_,Z x) = Just x
373 | namespace Dictionary
375 | optional : DictionaryMember -> Maybe Attribute
376 | optional (_, Required _ _ _) = Nothing
377 | optional (_, Optional t n _) =
378 | Just $
MkAttribute Nil t (MkAttributeName n.value)
381 | required : DictionaryMember -> Maybe Attribute
382 | required (_, Required _ t n) =
383 | Just $
MkAttribute Nil t (MkAttributeName n.value)
384 | required (_, Optional _ _ _) = Nothing
386 | namespace InterfaceMember
388 | part : (PartialInterfaceMember -> Maybe a)
389 | -> Attributed InterfaceMember
391 | part f (_,(S $
Z $
p)) = f p
394 | namespace MixinMember
396 | const : Attributed MixinMember -> Maybe Const
397 | const (_,MConst x) = Just x
401 | attrRO : Attributed MixinMember -> Maybe (Readonly Attribute)
402 | attrRO (_, (MAttrRO x)) = Just x
406 | attr : Attributed MixinMember -> Maybe Attribute
407 | attr (_, (MAttr x)) = Just x
410 | namespace NamespaceMember
413 | attrRO : NamespaceMember -> Maybe (Readonly Attribute)
414 | attrRO (S $
Z x) = Just x
415 | attrRO (Z _) = Nothing
417 | namespace PartialInterfaceMember
419 | const : PartialInterfaceMember -> Maybe Const
420 | const (IConst x) = Just x
424 | attrRO : PartialInterfaceMember -> Maybe (Readonly Attribute)
425 | attrRO (IAttrRO x) = Just x
429 | attr : PartialInterfaceMember -> Maybe Attribute
430 | attr (IAttr x) = Just x