diff options
| author | adambrangenberg <adabran06@gmail.com> | 2025-12-07 06:36:43 +0100 |
|---|---|---|
| committer | adambrangenberg <adabran06@gmail.com> | 2025-12-07 06:36:43 +0100 |
| commit | 2b48a574e8b9fed03a5c1969af4bb1e338f1be26 (patch) | |
| tree | f31c92f7788969b034838b8ec0ea7e187a746fc2 /src/Data | |
| parent | fb14daae9d3bc05a0d18f58875ef54e328081f19 (diff) | |
implemented section 1-3
Diffstat (limited to 'src/Data')
| -rw-r--r-- | src/Data/ContactData.hs | 22 | ||||
| -rw-r--r-- | src/Data/StandardErrorResponseData.hs | 18 | ||||
| -rw-r--r-- | src/Data/VersionsData.hs | 17 | ||||
| -rw-r--r-- | src/Data/WellKnownClientData.hs | 34 | ||||
| -rw-r--r-- | src/Data/WellKnownSupportData.hs | 21 |
5 files changed, 112 insertions, 0 deletions
diff --git a/src/Data/ContactData.hs b/src/Data/ContactData.hs new file mode 100644 index 0000000..397c465 --- /dev/null +++ b/src/Data/ContactData.hs @@ -0,0 +1,22 @@ +{-# LANGUAGE DeriveGeneric #-} + +module Data.ContactData (Contact, makeContact) where + +import Data.Aeson +import Data.Aeson.TH +import GHC.Generics (Generic) + +type EMail = String +type MXID = String + +data Contact = Contact + { email_address :: EMail + , matrix_id :: MXID + , role :: String -- Enum? [m.role.admin, m.role.security] + } deriving (Eq, Show, Generic) + +instance FromJSON Contact where +instance ToJSON Contact where + +makeContact :: String -> String -> String -> Contact +makeContact = Contact diff --git a/src/Data/StandardErrorResponseData.hs b/src/Data/StandardErrorResponseData.hs new file mode 100644 index 0000000..f6fda87 --- /dev/null +++ b/src/Data/StandardErrorResponseData.hs @@ -0,0 +1,18 @@ +{-# LANGUAGE DeriveGeneric #-} + +module Data.StandardErrorResponseData (StandardErrorResponse, makeStandardErrorResponse) where + +import Data.Aeson +import Data.Aeson.TH +import GHC.Generics (Generic) + +data StandardErrorResponse = StandardErrorResponse + { errcode :: String -- TODO: Enum? + , error :: String + } deriving (Eq, Show, Generic) + +instance FromJSON StandardErrorResponse where +instance ToJSON StandardErrorResponse where + +makeStandardErrorResponse :: String -> String -> StandardErrorResponse +makeStandardErrorResponse = StandardErrorResponse diff --git a/src/Data/VersionsData.hs b/src/Data/VersionsData.hs new file mode 100644 index 0000000..fe41763 --- /dev/null +++ b/src/Data/VersionsData.hs @@ -0,0 +1,17 @@ +{-# LANGUAGE DeriveGeneric #-} + +module Data.VersionsData (Versions, makeVersions) where + +import Data.Aeson +import Data.Aeson.TH +import GHC.Generics (Generic) + +data Versions = Versions -- unstable_features missing + { versions :: [String] + } deriving (Eq, Show, Generic) + +instance FromJSON Versions where +instance ToJSON Versions where + +makeVersions :: [String] -> Versions +makeVersions = Versions diff --git a/src/Data/WellKnownClientData.hs b/src/Data/WellKnownClientData.hs new file mode 100644 index 0000000..310002d --- /dev/null +++ b/src/Data/WellKnownClientData.hs @@ -0,0 +1,34 @@ +{-# LANGUAGE DeriveGeneric #-} + +module Data.WellKnownClientData (WellKnownClient, makeWellKnownClient) where + +import Data.Aeson +import Data.Aeson.TH +import GHC.Generics (Generic) + +data BaseUrlHolder = BaseUrlHolder + { base_url :: String + } deriving (Eq, Show, Generic) + +instance FromJSON BaseUrlHolder where +instance ToJSON BaseUrlHolder where + +data WellKnownClient = WellKnownClient + { homeserver :: BaseUrlHolder + , identity_server :: BaseUrlHolder + } deriving (Eq, Show, Generic) + +fieldMapping :: String -> String +fieldMapping "homeserver" = "m.homeserver" +fieldMapping "identity_server" = "m.identity_server" +fieldMapping name = name + +instance FromJSON WellKnownClient where + parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = fieldMapping } + +instance ToJSON WellKnownClient where + toJSON = genericToJSON defaultOptions { fieldLabelModifier = fieldMapping } + +makeWellKnownClient :: String -> String -> WellKnownClient +makeWellKnownClient homeserver identity_server = + WellKnownClient (BaseUrlHolder homeserver) (BaseUrlHolder identity_server) diff --git a/src/Data/WellKnownSupportData.hs b/src/Data/WellKnownSupportData.hs new file mode 100644 index 0000000..94e434c --- /dev/null +++ b/src/Data/WellKnownSupportData.hs @@ -0,0 +1,21 @@ +{-# LANGUAGE DeriveGeneric #-} + +module Data.WellKnownSupportData (WellKnownSupport, makeWellKnownSupport) where + +import Data.Aeson +import Data.Aeson.TH +import GHC.Generics (Generic) +import Data.ContactData + +type URI = String + +data WellKnownSupport = WellKnownSupport + { contacts :: [Contact] + , support_page :: URI + } deriving (Eq, Show, Generic) + +instance FromJSON WellKnownSupport where +instance ToJSON WellKnownSupport where + +makeWellKnownSupport :: [Contact] -> URI -> WellKnownSupport +makeWellKnownSupport = WellKnownSupport |