packages feed

sproxy2-1.91.0: src/Sproxy/Server/DB/DataFile.hs

{-# LANGUAGE OverloadedStrings #-}
module Sproxy.Server.DB.DataFile (
  DataFile(..)
, GroupMember(..)
, GroupPrivilege(..)
, PrivilegeRule(..)
) where

import Control.Applicative (empty)
import Data.Aeson (FromJSON, parseJSON)
import Data.Text (Text)
import Data.Yaml (Value(Object), (.:))


data DataFile = DataFile {
  groupMember    :: [GroupMember]
, groupPrivilege :: [GroupPrivilege]
, privilegeRule  :: [PrivilegeRule]
} deriving (Show)

instance FromJSON DataFile where
  parseJSON (Object m) = DataFile <$>
        m .: "group_member"
    <*> m .: "group_privilege"
    <*> m .: "privilege_rule"
  parseJSON _ = empty


data GroupMember = GroupMember {
  gmGroup :: Text
, gmEmail :: Text
} deriving (Show)

instance FromJSON GroupMember where
  parseJSON (Object m) = GroupMember <$>
        m .: "group"
    <*> m .: "email"
  parseJSON _ = empty


data GroupPrivilege = GroupPrivilege {
  gpGroup     :: Text
, gpDomain    :: Text
, gpPrivilege :: Text
} deriving (Show)

instance FromJSON GroupPrivilege where
  parseJSON (Object m) = GroupPrivilege <$>
        m .: "group"
    <*> m .: "domain"
    <*> m .: "privilege"
  parseJSON _ = empty


data PrivilegeRule = PrivilegeRule {
  prDomain    :: Text
, prPrivilege :: Text
, prPath      :: Text
, prMethod    :: Text
} deriving (Show)

instance FromJSON PrivilegeRule where
  parseJSON (Object m) = PrivilegeRule <$>
        m .: "domain"
    <*> m .: "privilege"
    <*> m .: "path"
    <*> m .: "method"
  parseJSON _ = empty