aboutsummaryrefslogtreecommitdiff
path: root/src/Data
diff options
context:
space:
mode:
authoradambrangenberg <adabran06@gmail.com>2025-12-07 06:36:43 +0100
committeradambrangenberg <adabran06@gmail.com>2025-12-07 06:36:43 +0100
commit2b48a574e8b9fed03a5c1969af4bb1e338f1be26 (patch)
treef31c92f7788969b034838b8ec0ea7e187a746fc2 /src/Data
parentfb14daae9d3bc05a0d18f58875ef54e328081f19 (diff)
implemented section 1-3
Diffstat (limited to 'src/Data')
-rw-r--r--src/Data/ContactData.hs22
-rw-r--r--src/Data/StandardErrorResponseData.hs18
-rw-r--r--src/Data/VersionsData.hs17
-rw-r--r--src/Data/WellKnownClientData.hs34
-rw-r--r--src/Data/WellKnownSupportData.hs21
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