Revision 44c15fa3 src/Ganeti/Types.hs
b/src/Ganeti/Types.hs | ||
---|---|---|
40 | 40 |
, DiskTemplate(..) |
41 | 41 |
, diskTemplateToRaw |
42 | 42 |
, diskTemplateFromRaw |
43 |
, TagKind(..) |
|
44 |
, tagKindToRaw |
|
45 |
, tagKindFromRaw |
|
43 | 46 |
, NonNegative |
44 | 47 |
, fromNonNegative |
45 | 48 |
, mkNonNegative |
... | ... | |
53 | 56 |
, fromNonEmpty |
54 | 57 |
, mkNonEmpty |
55 | 58 |
, NonEmptyString |
59 |
, QueryResultCode |
|
60 |
, IPv4Address |
|
61 |
, mkIPv4Address |
|
62 |
, IPv4Network |
|
63 |
, mkIPv4Network |
|
64 |
, IPv6Address |
|
65 |
, mkIPv6Address |
|
66 |
, IPv6Network |
|
67 |
, mkIPv6Network |
|
56 | 68 |
, MigrationMode(..) |
57 | 69 |
, VerifyOptionalChecks(..) |
70 |
, verifyOptionalChecksToRaw |
|
58 | 71 |
, DdmSimple(..) |
59 | 72 |
, DdmFull(..) |
60 | 73 |
, CVErrorCode(..) |
... | ... | |
166 | 179 |
mkNonEmpty [] = fail "Received empty value for non-empty list" |
167 | 180 |
mkNonEmpty xs = return (NonEmpty xs) |
168 | 181 |
|
182 |
instance (Eq a, Ord a) => Ord (NonEmpty a) where |
|
183 |
NonEmpty { fromNonEmpty = x1 } `compare` NonEmpty { fromNonEmpty = x2 } = |
|
184 |
x1 `compare` x2 |
|
185 |
|
|
169 | 186 |
instance (JSON.JSON a) => JSON.JSON (NonEmpty a) where |
170 | 187 |
showJSON = JSON.showJSON . fromNonEmpty |
171 | 188 |
readJSON v = JSON.readJSON v >>= mkNonEmpty |
... | ... | |
173 | 190 |
-- | A simple type alias for non-empty strings. |
174 | 191 |
type NonEmptyString = NonEmpty Char |
175 | 192 |
|
193 |
type QueryResultCode = Int |
|
194 |
|
|
195 |
newtype IPv4Address = IPv4Address { fromIPv4Address :: String } |
|
196 |
deriving (Show, Eq) |
|
197 |
|
|
198 |
-- FIXME: this should check that 'address' is a valid ip |
|
199 |
mkIPv4Address :: Monad m => String -> m IPv4Address |
|
200 |
mkIPv4Address address = |
|
201 |
return IPv4Address { fromIPv4Address = address } |
|
202 |
|
|
203 |
instance JSON.JSON IPv4Address where |
|
204 |
showJSON = JSON.showJSON . fromIPv4Address |
|
205 |
readJSON v = JSON.readJSON v >>= mkIPv4Address |
|
206 |
|
|
207 |
newtype IPv4Network = IPv4Network { fromIPv4Network :: String } |
|
208 |
deriving (Show, Eq) |
|
209 |
|
|
210 |
-- FIXME: this should check that 'address' is a valid ip |
|
211 |
mkIPv4Network :: Monad m => String -> m IPv4Network |
|
212 |
mkIPv4Network address = |
|
213 |
return IPv4Network { fromIPv4Network = address } |
|
214 |
|
|
215 |
instance JSON.JSON IPv4Network where |
|
216 |
showJSON = JSON.showJSON . fromIPv4Network |
|
217 |
readJSON v = JSON.readJSON v >>= mkIPv4Network |
|
218 |
|
|
219 |
newtype IPv6Address = IPv6Address { fromIPv6Address :: String } |
|
220 |
deriving (Show, Eq) |
|
221 |
|
|
222 |
-- FIXME: this should check that 'address' is a valid ip |
|
223 |
mkIPv6Address :: Monad m => String -> m IPv6Address |
|
224 |
mkIPv6Address address = |
|
225 |
return IPv6Address { fromIPv6Address = address } |
|
226 |
|
|
227 |
instance JSON.JSON IPv6Address where |
|
228 |
showJSON = JSON.showJSON . fromIPv6Address |
|
229 |
readJSON v = JSON.readJSON v >>= mkIPv6Address |
|
230 |
|
|
231 |
newtype IPv6Network = IPv6Network { fromIPv6Network :: String } |
|
232 |
deriving (Show, Eq) |
|
233 |
|
|
234 |
-- FIXME: this should check that 'address' is a valid ip |
|
235 |
mkIPv6Network :: Monad m => String -> m IPv6Network |
|
236 |
mkIPv6Network address = |
|
237 |
return IPv6Network { fromIPv6Network = address } |
|
238 |
|
|
239 |
instance JSON.JSON IPv6Network where |
|
240 |
showJSON = JSON.showJSON . fromIPv6Network |
|
241 |
readJSON v = JSON.readJSON v >>= mkIPv6Network |
|
242 |
|
|
176 | 243 |
-- * Ganeti types |
177 | 244 |
|
178 | 245 |
-- | Instance disk template type. |
... | ... | |
192 | 259 |
fromStringRepr = diskTemplateFromRaw |
193 | 260 |
toStringRepr = diskTemplateToRaw |
194 | 261 |
|
262 |
-- | Data type representing what items the tag operations apply to. |
|
263 |
$(THH.declareSADT "TagKind" |
|
264 |
[ ("TagKindInstance", 'C.tagInstance) |
|
265 |
, ("TagKindNode", 'C.tagNode) |
|
266 |
, ("TagKindGroup", 'C.tagNodegroup) |
|
267 |
, ("TagKindCluster", 'C.tagCluster) |
|
268 |
]) |
|
269 |
$(THH.makeJSONInstance ''TagKind) |
|
270 |
|
|
195 | 271 |
-- | The Group allocation policy type. |
196 | 272 |
-- |
197 | 273 |
-- Note that the order of constructors is important as the automatic |
Also available in: Unified diff