Revision 32a569fe htools/Ganeti/THH.hs

b/htools/Ganeti/THH.hs
69 69
import qualified Text.JSON as JSON
70 70
import Text.JSON.Pretty (pp_value)
71 71

  
72
import Ganeti.JSON
73

  
72 74
-- * Exported types
73 75

  
74 76
-- | Class of objects that can be converted to 'JSObject'
......
239 241

  
240 242
-- | showJSON as an expression, for reuse.
241 243
showJSONE :: Q Exp
242
showJSONE = varNameE "showJSON"
244
showJSONE = varE 'JSON.showJSON
245

  
246
-- | makeObj as an expression, for reuse.
247
makeObjE :: Q Exp
248
makeObjE = varE 'JSON.makeObj
249

  
250
-- | fromObj (Ganeti specific) as an expression, for reuse.
251
fromObjE :: Q Exp
252
fromObjE = varE 'fromObj
243 253

  
244 254
-- | ToRaw function name.
245 255
toRawName :: String -> Name
......
394 404
genShowJSON :: String -> Q Dec
395 405
genShowJSON name = do
396 406
  body <- [| JSON.showJSON . $(varE (toRawName name)) |]
397
  return $ FunD (mkName "showJSON") [Clause [] (NormalB body) []]
407
  return $ FunD 'JSON.showJSON [Clause [] (NormalB body) []]
398 408

  
399 409
-- | Creates the readJSON member of a JSON instance declaration.
400 410
--
......
417 427
                           $(stringE name) ++ ": " ++ e ++ " from " ++
418 428
                           show $(varE s)
419 429
           |]
420
  return $ FunD (mkName "readJSON") [Clause [VarP s] (NormalB body) []]
430
  return $ FunD 'JSON.readJSON [Clause [VarP s] (NormalB body) []]
421 431

  
422 432
-- | Generates a JSON instance for a given type.
423 433
--
......
546 556
                   JSON.showJSON $(stringE . deCamelCase $ sname) )] |]
547 557
      flist = listE (opid:felems)
548 558
      -- and finally convert all this to a json object
549
      flist' = [| $(varNameE "makeObj") (concat $flist) |]
559
      flist' = [| $makeObjE (concat $flist) |]
550 560
  clause [pat] (normalB flist') []
551 561

  
552 562
-- | Generates the main save opcode function.
......
583 593
      opid = mkName "op_id"
584 594
  st1 <- bindS (varP objname) [| liftM JSON.fromJSObject
585 595
                                 (JSON.readJSON $(varE arg1)) |]
586
  st2 <- bindS (varP opid) [| $(varNameE "fromObj")
587
                              $(varE objname) $(stringE "OP_ID") |]
596
  st2 <- bindS (varP opid) [| $fromObjE $(varE objname) $(stringE "OP_ID") |]
588 597
  -- the match results (per-constructor blocks)
589 598
  mexps <- mapM (uncurry loadConstructor) opdefs
590 599
  fails <- [| fail $ "Unknown opcode " ++ $(varE opid) |]
......
706 715
      tdlist = [| concat $flist |]
707 716
      iname = mkName "i"
708 717
  tclause <- clause [pat] (normalB tdlist) []
709
  cclause <- [| $(varNameE "makeObj") . $(varE tdname) |]
718
  cclause <- [| $makeObjE . $(varE tdname) |]
710 719
  let fname = mkName ("save" ++ sname)
711 720
  sigt <- [t| $(conT name) -> JSON.JSValue |]
712 721
  return [SigD tdname tdsigt, FunD tdname [tclause],
......
741 750
objectShowJSON :: String -> Q Dec
742 751
objectShowJSON name = do
743 752
  body <- [| JSON.showJSON . $(varE . mkName $ "save" ++ name) |]
744
  return $ FunD (mkName "showJSON") [Clause [] (NormalB body) []]
753
  return $ FunD 'JSON.showJSON [Clause [] (NormalB body) []]
745 754

  
746 755
-- | Generates the load object functionality.
747 756
genLoadObject :: (Field -> Q (Name, Stmt))
......
775 784
          -- we treat both optional types the same, since
776 785
          -- 'maybeFromObj' can deal with both missing and null values
777 786
          -- appropriately (the same)
778
          then [| $(varNameE "maybeFromObj") $objvar $objfield |]
787
          then [| $(varE 'maybeFromObj) $objvar $objfield |]
779 788
          else case fieldDefault field of
780 789
                 Just defv ->
781
                   [| $(varNameE "fromObjWithDefault") $objvar
790
                   [| $(varE 'fromObjWithDefault) $objvar
782 791
                      $objfield $defv |]
783
                 Nothing -> [| $(varNameE "fromObj") $objvar $objfield |]
792
                 Nothing -> [| $fromObjE $objvar $objfield |]
784 793
  bexp <- loadFn field loadexp objvar
785 794

  
786 795
  return (fvar, BindS (VarP fvar) bexp)
......
795 804
                 JSON.Error $ "Can't parse value for type " ++
796 805
                       $(stringE name) ++ ": " ++ e
797 806
           |]
798
  return $ FunD (mkName "readJSON") [Clause [VarP s] (NormalB body) []]
807
  return $ FunD 'JSON.readJSON [Clause [VarP s] (NormalB body) []]
799 808

  
800 809
-- * Inheritable parameter tables implementation
801 810

  
......
886 895
  -- these are used in all patterns below
887 896
  let objvar = varNameE "o"
888 897
      objfield = stringE name
889
      loadexp = [| $(varNameE "maybeFromObj") $objvar $objfield |]
898
      loadexp = [| $(varE 'maybeFromObj) $objvar $objfield |]
890 899
  bexp <- loadFn field loadexp objvar
891 900
  return (fvar, BindS (VarP fvar) bexp)
892 901

  
......
894 903
buildFromMaybe :: String -> Q Dec
895 904
buildFromMaybe fname =
896 905
  valD (varP (mkName $ "n_" ++ fname))
897
         (normalB [| $(varNameE "fromMaybe")
906
         (normalB [| $(varE 'fromMaybe)
898 907
                        $(varNameE $ "f_" ++ fname)
899 908
                        $(varNameE $ "p_" ++ fname) |]) []
900 909

  

Also available in: Unified diff