Safe Haskell | None |
---|
Implementation of the Ganeti config objects.
Some object fields are not implemented yet, and as such they are commented out below.
- fillDict :: Ord k => Map k v -> Map k v -> [k] -> Map k v
- type HvParams = Container JSValue
- type OsParams = Container String
- class TimeStampObject a where
- class UuidObject a where
- uuidOf :: a -> String
- class SerialNoObject a where
- serialOf :: a -> Int
- class TagsObject a where
- tagsOf :: a -> Set String
- data Ip4Address = Ip4Address Word8 Word8 Word8 Word8
- readIp4Address :: (Applicative m, Monad m) => String -> m Ip4Address
- nextIp4Address :: Ip4Address -> Ip4Address
- data Ip4Network = Ip4Network Ip4Address Word8
- data Network = Network {
- networkName :: NonEmptyString
- networkMacPrefix :: Maybe String
- networkNetwork :: Ip4Network
- networkNetwork6 :: Maybe String
- networkGateway :: Maybe Ip4Address
- networkGateway6 :: Maybe String
- networkReservations :: Maybe String
- networkExtReservations :: Maybe String
- networkUuid :: String
- networkCtime :: Double
- networkMtime :: Double
- networkSerial :: Int
- networkTags :: TagSet
- loadNetwork :: JSValue -> Result Network
- saveNetwork :: Network -> JSValue
- toDictNetwork :: Network -> [(String, JSValue)]
- data FilledNicParams = FilledNicParams {}
- data PartialNicParams = PartialNicParams {}
- allNicParamFields :: [String]
- fillNicParams :: FilledNicParams -> PartialNicParams -> FilledNicParams
- loadPartialNicParams :: JSValue -> Result PartialNicParams
- savePartialNicParams :: PartialNicParams -> JSValue
- toDictPartialNicParams :: PartialNicParams -> [(String, JSValue)]
- loadFilledNicParams :: JSValue -> Result FilledNicParams
- saveFilledNicParams :: FilledNicParams -> JSValue
- toDictFilledNicParams :: FilledNicParams -> [(String, JSValue)]
- data PartialNic = PartialNic {
- nicMac :: String
- nicIp :: Maybe String
- nicNicparams :: PartialNicParams
- nicNetwork :: Maybe String
- nicName :: Maybe String
- nicUuid :: String
- loadPartialNic :: JSValue -> Result PartialNic
- savePartialNic :: PartialNic -> JSValue
- toDictPartialNic :: PartialNic -> [(String, JSValue)]
- devType :: String
- data DiskLogicalId
- = LIDPlain String String
- | LIDDrbd8 String String Int Int Int String
- | LIDFile FileDriver String
- | LIDSharedFile FileDriver String
- | LIDBlockDev BlockDriver String
- | LIDRados String String
- | LIDExt String String
- lidDiskType :: DiskLogicalId -> DiskTemplate
- lidEncodeType :: DiskLogicalId -> [(String, JSValue)]
- encodeDLId :: DiskLogicalId -> JSValue
- encodeFullDLId :: DiskLogicalId -> (JSValue, [(String, JSValue)])
- decodeDLId :: [(String, JSValue)] -> JSValue -> Result DiskLogicalId
- data Disk = Disk {
- diskLogicalId :: DiskLogicalId
- diskChildren :: [Disk]
- diskIvName :: String
- diskSize :: Int
- diskMode :: DiskMode
- diskName :: Maybe String
- diskSpindles :: Maybe Int
- diskUuid :: String
- loadDisk :: JSValue -> Result Disk
- saveDisk :: Disk -> JSValue
- toDictDisk :: Disk -> [(String, JSValue)]
- includesLogicalId :: String -> String -> Disk -> Bool
- data FilledBeParams = FilledBeParams {
- bepMinmem :: Int
- bepMaxmem :: Int
- bepVcpus :: Int
- bepAutoBalance :: Bool
- data PartialBeParams = PartialBeParams {
- bepMinmemP :: Maybe Int
- bepMaxmemP :: Maybe Int
- bepVcpusP :: Maybe Int
- bepAutoBalanceP :: Maybe Bool
- allBeParamFields :: [String]
- fillBeParams :: FilledBeParams -> PartialBeParams -> FilledBeParams
- loadPartialBeParams :: JSValue -> Result PartialBeParams
- savePartialBeParams :: PartialBeParams -> JSValue
- toDictPartialBeParams :: PartialBeParams -> [(String, JSValue)]
- loadFilledBeParams :: JSValue -> Result FilledBeParams
- saveFilledBeParams :: FilledBeParams -> JSValue
- toDictFilledBeParams :: FilledBeParams -> [(String, JSValue)]
- data Instance = Instance {
- instName :: String
- instPrimaryNode :: String
- instOs :: String
- instHypervisor :: Hypervisor
- instHvparams :: HvParams
- instBeparams :: PartialBeParams
- instOsparams :: OsParams
- instAdminState :: AdminState
- instNics :: [PartialNic]
- instDisks :: [Disk]
- instDiskTemplate :: DiskTemplate
- instDisksActive :: Bool
- instNetworkPort :: Maybe Int
- instCtime :: Double
- instMtime :: Double
- instUuid :: String
- instSerial :: Int
- instTags :: TagSet
- loadInstance :: JSValue -> Result Instance
- saveInstance :: Instance -> JSValue
- toDictInstance :: Instance -> [(String, JSValue)]
- data FilledISpecParams = FilledISpecParams {
- ispecMemorySize :: Int
- ispecDiskSize :: Int
- ispecDiskCount :: Int
- ispecCpuCount :: Int
- ispecNicCount :: Int
- ispecSpindleUse :: Int
- data PartialISpecParams = PartialISpecParams {
- ispecMemorySizeP :: Maybe Int
- ispecDiskSizeP :: Maybe Int
- ispecDiskCountP :: Maybe Int
- ispecCpuCountP :: Maybe Int
- ispecNicCountP :: Maybe Int
- ispecSpindleUseP :: Maybe Int
- allISpecParamFields :: [String]
- fillISpecParams :: FilledISpecParams -> PartialISpecParams -> FilledISpecParams
- loadPartialISpecParams :: JSValue -> Result PartialISpecParams
- savePartialISpecParams :: PartialISpecParams -> JSValue
- toDictPartialISpecParams :: PartialISpecParams -> [(String, JSValue)]
- loadFilledISpecParams :: JSValue -> Result FilledISpecParams
- saveFilledISpecParams :: FilledISpecParams -> JSValue
- toDictFilledISpecParams :: FilledISpecParams -> [(String, JSValue)]
- data MinMaxISpecs = MinMaxISpecs {}
- loadMinMaxISpecs :: JSValue -> Result MinMaxISpecs
- saveMinMaxISpecs :: MinMaxISpecs -> JSValue
- toDictMinMaxISpecs :: MinMaxISpecs -> [(String, JSValue)]
- data PartialIPolicy = PartialIPolicy {
- ipolicyMinMaxISpecsP :: Maybe [MinMaxISpecs]
- ipolicyStdSpecP :: Maybe PartialISpecParams
- ipolicySpindleRatioP :: Maybe Double
- ipolicyVcpuRatioP :: Maybe Double
- ipolicyDiskTemplatesP :: Maybe [DiskTemplate]
- loadPartialIPolicy :: JSValue -> Result PartialIPolicy
- savePartialIPolicy :: PartialIPolicy -> JSValue
- toDictPartialIPolicy :: PartialIPolicy -> [(String, JSValue)]
- data FilledIPolicy = FilledIPolicy {
- ipolicyMinMaxISpecs :: [MinMaxISpecs]
- ipolicyStdSpec :: FilledISpecParams
- ipolicySpindleRatio :: Double
- ipolicyVcpuRatio :: Double
- ipolicyDiskTemplates :: [DiskTemplate]
- loadFilledIPolicy :: JSValue -> Result FilledIPolicy
- saveFilledIPolicy :: FilledIPolicy -> JSValue
- toDictFilledIPolicy :: FilledIPolicy -> [(String, JSValue)]
- fillIPolicy :: FilledIPolicy -> PartialIPolicy -> FilledIPolicy
- data FilledNDParams = FilledNDParams {
- ndpOobProgram :: String
- ndpSpindleCount :: Int
- ndpExclusiveStorage :: Bool
- ndpOvs :: Bool
- ndpOvsName :: String
- ndpOvsLink :: String
- data PartialNDParams = PartialNDParams {
- ndpOobProgramP :: Maybe String
- ndpSpindleCountP :: Maybe Int
- ndpExclusiveStorageP :: Maybe Bool
- ndpOvsP :: Maybe Bool
- ndpOvsNameP :: Maybe String
- ndpOvsLinkP :: Maybe String
- allNDParamFields :: [String]
- fillNDParams :: FilledNDParams -> PartialNDParams -> FilledNDParams
- loadPartialNDParams :: JSValue -> Result PartialNDParams
- savePartialNDParams :: PartialNDParams -> JSValue
- toDictPartialNDParams :: PartialNDParams -> [(String, JSValue)]
- loadFilledNDParams :: JSValue -> Result FilledNDParams
- saveFilledNDParams :: FilledNDParams -> JSValue
- toDictFilledNDParams :: FilledNDParams -> [(String, JSValue)]
- data Node = Node {
- nodeName :: String
- nodePrimaryIp :: String
- nodeSecondaryIp :: String
- nodeMasterCandidate :: Bool
- nodeOffline :: Bool
- nodeDrained :: Bool
- nodeGroup :: String
- nodeMasterCapable :: Bool
- nodeVmCapable :: Bool
- nodeNdparams :: PartialNDParams
- nodePowered :: Bool
- nodeCtime :: Double
- nodeMtime :: Double
- nodeUuid :: String
- nodeSerial :: Int
- nodeTags :: TagSet
- loadNode :: JSValue -> Result Node
- saveNode :: Node -> JSValue
- toDictNode :: Node -> [(String, JSValue)]
- type DiskParams = Container (Container JSValue)
- type Networks = Container PartialNicParams
- data NodeGroup = NodeGroup {
- groupName :: String
- groupMembers :: [String]
- groupNdparams :: PartialNDParams
- groupAllocPolicy :: AllocPolicy
- groupIpolicy :: PartialIPolicy
- groupDiskparams :: DiskParams
- groupNetworks :: Networks
- groupCtime :: Double
- groupMtime :: Double
- groupUuid :: String
- groupSerial :: Int
- groupTags :: TagSet
- loadNodeGroup :: JSValue -> Result NodeGroup
- saveNodeGroup :: NodeGroup -> JSValue
- toDictNodeGroup :: NodeGroup -> [(String, JSValue)]
- data IpFamily
- = IpFamilyV4
- | IpFamilyV6
- ipFamilyFromRaw :: forall m. Monad m => Int -> m IpFamily
- ipFamilyToRaw :: IpFamily -> Int
- ipFamilyToVersion :: IpFamily -> Int
- type ClusterHvParams = Container HvParams
- type OsHvParams = Container ClusterHvParams
- type ClusterBeParams = Container FilledBeParams
- type ClusterOsParams = Container OsParams
- type ClusterNicParams = Container FilledNicParams
- type UidPool = [(Int, Int)]
- data Cluster = Cluster {
- clusterRsahostkeypub :: String
- clusterDsahostkeypub :: Maybe String
- clusterHighestUsedPort :: Int
- clusterTcpudpPortPool :: [Int]
- clusterMacPrefix :: String
- clusterVolumeGroupName :: Maybe String
- clusterReservedLvs :: [String]
- clusterDrbdUsermodeHelper :: Maybe String
- clusterMasterNode :: String
- clusterMasterIp :: String
- clusterMasterNetdev :: String
- clusterMasterNetmask :: Int
- clusterUseExternalMipScript :: Bool
- clusterClusterName :: String
- clusterFileStorageDir :: String
- clusterSharedFileStorageDir :: String
- clusterEnabledHypervisors :: [Hypervisor]
- clusterHvparams :: ClusterHvParams
- clusterOsHvp :: OsHvParams
- clusterBeparams :: ClusterBeParams
- clusterOsparams :: ClusterOsParams
- clusterNicparams :: ClusterNicParams
- clusterNdparams :: FilledNDParams
- clusterDiskparams :: DiskParams
- clusterCandidatePoolSize :: Int
- clusterModifyEtcHosts :: Bool
- clusterModifySshSetup :: Bool
- clusterMaintainNodeHealth :: Bool
- clusterUidPool :: UidPool
- clusterDefaultIallocator :: String
- clusterHiddenOs :: [String]
- clusterBlacklistedOs :: [String]
- clusterPrimaryIpFamily :: IpFamily
- clusterPreallocWipeDisks :: Bool
- clusterIpolicy :: FilledIPolicy
- clusterEnabledDiskTemplates :: [DiskTemplate]
- clusterCtime :: Double
- clusterMtime :: Double
- clusterUuid :: String
- clusterSerial :: Int
- clusterTags :: TagSet
- loadCluster :: JSValue -> Result Cluster
- saveCluster :: Cluster -> JSValue
- toDictCluster :: Cluster -> [(String, JSValue)]
- data ConfigData = ConfigData {}
- loadConfigData :: JSValue -> Result ConfigData
- saveConfigData :: ConfigData -> JSValue
- toDictConfigData :: ConfigData -> [(String, JSValue)]
Generic definitions
fillDict :: Ord k => Map k v -> Map k v -> [k] -> Map k vSource
Fills one map with keys from the other map, if not already existing. Mirrors objects.py:FillDict.
type HvParams = Container JSValueSource
The hypervisor parameter type. This is currently a simple map, without type checking on key/value pairs.
type OsParams = Container StringSource
The OS parameters type. This is, and will remain, a string container, since the keys are dynamically declared by the OSes, and the values are always strings.
class TimeStampObject a whereSource
Class of objects that have timestamps.
class UuidObject a whereSource
Class of objects that have an UUID.
class SerialNoObject a whereSource
Class of object that have a serial number.
class TagsObject a whereSource
Class of objects that have tags.
Network definitions
Ipv4 types
data Ip4Address Source
Custom type for a simple IPv4 address.
Ip4Address Word8 Word8 Word8 Word8 |
Eq Ip4Address | |
Show Ip4Address | |
IsString Ip4Address | IsString instance for |
Arbitrary Ip4Address | |
JSON Ip4Address | JSON instance for |
readIp4Address :: (Applicative m, Monad m) => String -> m Ip4AddressSource
Parses an IPv4 address from a string.
nextIp4Address :: Ip4Address -> Ip4AddressSource
"Next" address implementation for IPv4 addresses.
Note that this loops! Note also that this is a very dumb implementation.
data Ip4Network Source
Custom type for an IPv4 network.
Ip4Network Ip4Address Word8 |
Eq Ip4Network | |
Show Ip4Network | |
Arbitrary Ip4Network | |
JSON Ip4Network | JSON instance for |
Ganeti "network" config object.
Network | |
|
Eq Network | |
Show Network | |
Arbitrary Network | |
JSON Network | |
TagsObject Network | |
SerialNoObject Network | |
UuidObject Network | |
TimeStampObject Network |
loadNetwork :: JSValue -> Result NetworkSource
saveNetwork :: Network -> JSValueSource
toDictNetwork :: Network -> [(String, JSValue)]Source
NIC definitions
data FilledNicParams Source
Eq FilledNicParams | |
Show FilledNicParams | |
Arbitrary FilledNicParams | |
Arbitrary ClusterNicParams | |
JSON FilledNicParams | |
DictObject FilledNicParams |
data PartialNicParams Source
Eq PartialNicParams | |
Show PartialNicParams | |
Arbitrary PartialNicParams | |
JSON PartialNicParams |
allNicParamFields :: [String]Source
loadPartialNicParams :: JSValue -> Result PartialNicParamsSource
savePartialNicParams :: PartialNicParams -> JSValueSource
toDictPartialNicParams :: PartialNicParams -> [(String, JSValue)]Source
loadFilledNicParams :: JSValue -> Result FilledNicParamsSource
saveFilledNicParams :: FilledNicParams -> JSValueSource
toDictFilledNicParams :: FilledNicParams -> [(String, JSValue)]Source
data PartialNic Source
PartialNic | |
|
Eq PartialNic | |
Show PartialNic | |
Arbitrary PartialNic | |
JSON PartialNic | |
UuidObject PartialNic |
loadPartialNic :: JSValue -> Result PartialNicSource
savePartialNic :: PartialNic -> JSValueSource
toDictPartialNic :: PartialNic -> [(String, JSValue)]Source
Disk definitions
data DiskLogicalId Source
The disk configuration type. This includes the disk type itself, for a more complete consistency. Note that since in the Python code-base there's no authoritative place where we document the logical id, this is probably a good reference point.
LIDPlain String String | Volume group, logical volume |
LIDDrbd8 String String Int Int Int String | NodeA, NodeB, Port, MinorA, MinorB, Secret |
LIDFile FileDriver String | Driver, path |
LIDSharedFile FileDriver String | Driver, path |
LIDBlockDev BlockDriver String | Driver, path (must be under /dev) |
LIDRados String String | Unused, path |
LIDExt String String | ExtProvider, unique name |
Eq DiskLogicalId | |
Show DiskLogicalId | |
Arbitrary DiskLogicalId |
lidEncodeType :: DiskLogicalId -> [(String, JSValue)]Source
encodeDLId :: DiskLogicalId -> JSValueSource
encodeFullDLId :: DiskLogicalId -> (JSValue, [(String, JSValue)])Source
decodeDLId :: [(String, JSValue)] -> JSValue -> Result DiskLogicalIdSource
Disk data structure.
This is declared manually as it's a recursive structure, and our TH code currently can't build it.
Disk | |
|
toDictDisk :: Disk -> [(String, JSValue)]Source
includesLogicalId :: String -> String -> Disk -> BoolSource
Determines whether a disk or one of his children has the given logical id (determined by the volume group name and by the logical volume name). This can be true only for DRBD or LVM disks.
Instance definitions
data FilledBeParams Source
FilledBeParams | |
|
Eq FilledBeParams | |
Show FilledBeParams | |
Arbitrary FilledBeParams | |
Arbitrary ClusterBeParams | |
JSON FilledBeParams | |
DictObject FilledBeParams |
data PartialBeParams Source
PartialBeParams | |
|
Eq PartialBeParams | |
Show PartialBeParams | |
Arbitrary PartialBeParams | |
JSON PartialBeParams |
allBeParamFields :: [String]Source
loadPartialBeParams :: JSValue -> Result PartialBeParamsSource
savePartialBeParams :: PartialBeParams -> JSValueSource
toDictPartialBeParams :: PartialBeParams -> [(String, JSValue)]Source
loadFilledBeParams :: JSValue -> Result FilledBeParamsSource
saveFilledBeParams :: FilledBeParams -> JSValueSource
toDictFilledBeParams :: FilledBeParams -> [(String, JSValue)]Source
Instance | |
|
Eq Instance | |
Show Instance | |
Arbitrary Instance | |
JSON Instance | |
TagsObject Instance | |
SerialNoObject Instance | |
UuidObject Instance | |
TimeStampObject Instance |
loadInstance :: JSValue -> Result InstanceSource
saveInstance :: Instance -> JSValueSource
toDictInstance :: Instance -> [(String, JSValue)]Source
IPolicy definitions
data FilledISpecParams Source
FilledISpecParams | |
|
Eq FilledISpecParams | |
Show FilledISpecParams | |
Arbitrary FilledISpecParams | |
JSON FilledISpecParams | |
DictObject FilledISpecParams |
data PartialISpecParams Source
PartialISpecParams | |
|
Eq PartialISpecParams | |
Show PartialISpecParams | |
Arbitrary PartialISpecParams | FIXME: This generates completely random data, without normal validation rules. |
JSON PartialISpecParams |
allISpecParamFields :: [String]Source
loadPartialISpecParams :: JSValue -> Result PartialISpecParamsSource
savePartialISpecParams :: PartialISpecParams -> JSValueSource
toDictPartialISpecParams :: PartialISpecParams -> [(String, JSValue)]Source
loadFilledISpecParams :: JSValue -> Result FilledISpecParamsSource
saveFilledISpecParams :: FilledISpecParams -> JSValueSource
toDictFilledISpecParams :: FilledISpecParams -> [(String, JSValue)]Source
data MinMaxISpecs Source
Eq MinMaxISpecs | |
Show MinMaxISpecs | |
Arbitrary MinMaxISpecs | |
JSON MinMaxISpecs |
loadMinMaxISpecs :: JSValue -> Result MinMaxISpecsSource
saveMinMaxISpecs :: MinMaxISpecs -> JSValueSource
toDictMinMaxISpecs :: MinMaxISpecs -> [(String, JSValue)]Source
data PartialIPolicy Source
Custom partial ipolicy. This is not built via buildParam since it has a special 2-level inheritance mode.
PartialIPolicy | |
|
Eq PartialIPolicy | |
Show PartialIPolicy | |
Arbitrary PartialIPolicy | FIXME: This generates completely random data, without normal validation rules. |
JSON PartialIPolicy |
loadPartialIPolicy :: JSValue -> Result PartialIPolicySource
savePartialIPolicy :: PartialIPolicy -> JSValueSource
toDictPartialIPolicy :: PartialIPolicy -> [(String, JSValue)]Source
data FilledIPolicy Source
Custom filled ipolicy. This is not built via buildParam since it has a special 2-level inheritance mode.
FilledIPolicy | |
|
Eq FilledIPolicy | |
Show FilledIPolicy | |
Arbitrary FilledIPolicy | |
JSON FilledIPolicy |
loadFilledIPolicy :: JSValue -> Result FilledIPolicySource
saveFilledIPolicy :: FilledIPolicy -> JSValueSource
toDictFilledIPolicy :: FilledIPolicy -> [(String, JSValue)]Source
fillIPolicy :: FilledIPolicy -> PartialIPolicy -> FilledIPolicySource
Custom filler for the ipolicy types.
Node definitions
data FilledNDParams Source
FilledNDParams | |
|
Eq FilledNDParams | |
Show FilledNDParams | |
Arbitrary FilledNDParams | |
JSON FilledNDParams | |
DictObject FilledNDParams |
data PartialNDParams Source
PartialNDParams | |
|
Eq PartialNDParams | |
Show PartialNDParams | |
Arbitrary PartialNDParams | |
JSON PartialNDParams |
allNDParamFields :: [String]Source
loadPartialNDParams :: JSValue -> Result PartialNDParamsSource
savePartialNDParams :: PartialNDParams -> JSValueSource
toDictPartialNDParams :: PartialNDParams -> [(String, JSValue)]Source
loadFilledNDParams :: JSValue -> Result FilledNDParamsSource
saveFilledNDParams :: FilledNDParams -> JSValueSource
toDictFilledNDParams :: FilledNDParams -> [(String, JSValue)]Source
Node | |
|
Eq Node | |
Show Node | |
Arbitrary Node | |
JSON Node | |
TagsObject Node | |
SerialNoObject Node | |
UuidObject Node | |
TimeStampObject Node | |
NdParamObject Node |
toDictNode :: Node -> [(String, JSValue)]Source
NodeGroup definitions
type DiskParams = Container (Container JSValue)Source
The disk parameters type.
NodeGroup | |
|
Eq NodeGroup | |
Show NodeGroup | |
Arbitrary NodeGroup | |
JSON NodeGroup | |
TagsObject NodeGroup | |
SerialNoObject NodeGroup | |
UuidObject NodeGroup | |
TimeStampObject NodeGroup | |
NdParamObject NodeGroup |
loadNodeGroup :: JSValue -> Result NodeGroupSource
saveNodeGroup :: NodeGroup -> JSValueSource
toDictNodeGroup :: NodeGroup -> [(String, JSValue)]Source
IP family type
ipFamilyFromRaw :: forall m. Monad m => Int -> m IpFamilySource
ipFamilyToRaw :: IpFamily -> IntSource
ipFamilyToVersion :: IpFamily -> IntSource
Conversion from IP family to IP version. This is needed because Python uses both, depending on context.
type ClusterHvParams = Container HvParamsSource
Cluster HvParams (hvtype to hvparams mapping).
type OsHvParams = Container ClusterHvParamsSource
Cluster Os-HvParams (os to hvparams mapping).
type ClusterBeParams = Container FilledBeParamsSource
Cluser BeParams.
type ClusterOsParams = Container OsParamsSource
Cluster OsParams.
type ClusterNicParams = Container FilledNicParamsSource
Cluster NicParams.
Cluster definitions
Eq Cluster | |
Show Cluster | |
Arbitrary Cluster | |
JSON Cluster | |
TagsObject Cluster | |
SerialNoObject Cluster | |
UuidObject Cluster | |
TimeStampObject Cluster | |
NdParamObject Cluster |
loadCluster :: JSValue -> Result ClusterSource
saveCluster :: Cluster -> JSValueSource
toDictCluster :: Cluster -> [(String, JSValue)]Source
ConfigData definitions
data ConfigData Source
ConfigData | |
|
Eq ConfigData | |
Show ConfigData | |
Arbitrary ConfigData | |
JSON ConfigData | |
SerialNoObject ConfigData |
loadConfigData :: JSValue -> Result ConfigDataSource
saveConfigData :: ConfigData -> JSValueSource
toDictConfigData :: ConfigData -> [(String, JSValue)]Source