summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/Struct')
-rw-r--r--src/Struct/BattleSummary.elm65
-rw-r--r--src/Struct/Error.elm45
-rw-r--r--src/Struct/Event.elm25
-rw-r--r--src/Struct/Model.elm64
-rw-r--r--src/Struct/Player.elm107
-rw-r--r--src/Struct/ServerReply.elm23
-rw-r--r--src/Struct/UI.elm62
7 files changed, 391 insertions, 0 deletions
diff --git a/src/Struct/BattleSummary.elm b/src/Struct/BattleSummary.elm
new file mode 100644
index 0000000..adab965
--- /dev/null
+++ b/src/Struct/BattleSummary.elm
@@ -0,0 +1,65 @@
+module Struct.BattleSummary exposing
+ (
+ Type,
+ get_id,
+ get_name,
+ get_last_edit,
+ is_players_turn,
+ decoder,
+ none
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Json.Decode
+import Json.Decode.Pipeline
+
+-- Main Menu -------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ id : String,
+ name : String,
+ last_edit : String,
+ is_players_turn : Bool
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_id : Type -> String
+get_id t = t.id
+
+get_name : Type -> String
+get_name t = t.name
+
+get_last_edit : Type -> String
+get_last_edit t = t.last_edit
+
+is_players_turn : Type -> Bool
+is_players_turn t = t.is_players_turn
+
+decoder : (Json.Decode.Decoder Type)
+decoder =
+ (Json.Decode.Pipeline.decode
+ Type
+ |> (Json.Decode.Pipeline.required "id" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "nme" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "ldt" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "ipt" Json.Decode.bool)
+ )
+
+none : Type
+none =
+ {
+ id = "",
+ name = "Unknown",
+ last_edit = "Never",
+ is_players_turn = False
+ }
diff --git a/src/Struct/Error.elm b/src/Struct/Error.elm
new file mode 100644
index 0000000..5f40c09
--- /dev/null
+++ b/src/Struct/Error.elm
@@ -0,0 +1,45 @@
+module Struct.Error exposing (Type, Mode(..), new, to_string)
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type Mode =
+ IllegalAction
+ | Programming
+ | Unimplemented
+ | Networking
+ | Failure
+
+type alias Type =
+ {
+ mode: Mode,
+ message: String
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+new : Mode -> String -> Type
+new mode str =
+ {
+ mode = mode,
+ message = str
+ }
+
+to_string : Type -> String
+to_string e =
+ (
+ (case e.mode of
+ Failure -> "The action failed: "
+ IllegalAction -> "Request discarded: "
+ Programming -> "Error in the program (please report): "
+ Unimplemented -> "Update discarded due to unimplemented feature: "
+ Networking -> "Error while conversing with the server: "
+ )
+ ++ e.message
+ )
+
diff --git a/src/Struct/Event.elm b/src/Struct/Event.elm
new file mode 100644
index 0000000..419ef51
--- /dev/null
+++ b/src/Struct/Event.elm
@@ -0,0 +1,25 @@
+module Struct.Event exposing (Type(..), attempted)
+
+-- Elm -------------------------------------------------------------------------
+import Http
+
+-- Main Menu -------------------------------------------------------------------
+import Struct.Error
+import Struct.ServerReply
+import Struct.UI
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type Type =
+ None
+ | Failed Struct.Error.Type
+ | ServerReplied (Result Http.Error (List Struct.ServerReply.Type))
+ | TabSelected Struct.UI.Tab
+
+attempted : (Result.Result err val) -> Type
+attempted act =
+ case act of
+ (Result.Ok _) -> None
+ (Result.Err msg) ->
+ (Failed (Struct.Error.new Struct.Error.Failure (toString msg)))
diff --git a/src/Struct/Model.elm b/src/Struct/Model.elm
new file mode 100644
index 0000000..747a39e
--- /dev/null
+++ b/src/Struct/Model.elm
@@ -0,0 +1,64 @@
+module Struct.Model exposing
+ (
+ Type,
+ new,
+ invalidate,
+ reset,
+ clear_error
+ )
+
+-- Elm -------------------------------------------------------------------------
+
+-- Shared ----------------------------------------------------------------------
+import Struct.Flags
+
+-- Main Menu -------------------------------------------------------------------
+import Struct.Error
+import Struct.Player
+import Struct.UI
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ flags: Struct.Flags.Type,
+ error: (Maybe Struct.Error.Type),
+ player_id: String,
+ session_token: String,
+ player: Struct.Player.Type,
+ ui: Struct.UI.Type
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+new : Struct.Flags.Type -> Type
+new flags =
+ {
+ flags = flags,
+ error = Nothing,
+ player_id = flags.user_id,
+ session_token = flags.token,
+ player = (Struct.Player.none),
+ ui = (Struct.UI.default)
+ }
+
+reset : Type -> Type
+reset model =
+ {model |
+ error = Nothing
+ }
+
+invalidate : Struct.Error.Type -> Type -> Type
+invalidate err model =
+ {model |
+ error = (Just err)
+ }
+
+clear_error : Type -> Type
+clear_error model = {model | error = Nothing}
diff --git a/src/Struct/Player.elm b/src/Struct/Player.elm
new file mode 100644
index 0000000..73fbdb3
--- /dev/null
+++ b/src/Struct/Player.elm
@@ -0,0 +1,107 @@
+module Struct.Player exposing
+ (
+ Type,
+ get_id,
+ get_username,
+ get_maps,
+ get_campaigns,
+ get_invasions,
+ get_events,
+ get_roster_id,
+ get_inventory_id,
+ decoder,
+ none
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Json.Decode
+import Json.Decode.Pipeline
+
+-- Main Menu -------------------------------------------------------------------
+import Struct.BattleSummary
+import Struct.MapSummary
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ id : String,
+ name : String,
+ maps : (List Struct.MapSummary.Type),
+ campaigns : (List Struct.BattleSummary.Type),
+ invasions : (List Struct.BattleSummary.Type),
+ events : (List Struct.BattleSummary.Type),
+ roster_id : String,
+ inventory_id : String
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_id : Type -> String
+get_id t = t.id
+
+get_username : Type -> String
+get_username t = t.name
+
+get_maps : Type -> (List Struct.MapSummary.Type)
+get_maps t = t.maps
+
+get_campaigns : Type -> (List Struct.BattleSummary.Type)
+get_campaigns t = t.campaigns
+
+get_invasions : Type -> (List Struct.BattleSummary.Type)
+get_invasions t = t.invasions
+
+get_events : Type -> (List Struct.BattleSummary.Type)
+get_events t = t.events
+
+get_roster_id : Type -> String
+get_roster_id t = t.roster_id
+
+get_inventory_id : Type -> String
+get_inventory_id t = t.inventory_id
+
+decoder : (Json.Decode.Decoder Type)
+decoder =
+ (Json.Decode.Pipeline.decode
+ Type
+ |> (Json.Decode.Pipeline.required "id" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "nme" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required
+ "maps"
+ (Json.Decode.list Struct.MapSummary.decoder)
+ )
+ |> (Json.Decode.Pipeline.required
+ "cmps"
+ (Json.Decode.list Struct.BattleSummary.decoder)
+ )
+ |> (Json.Decode.Pipeline.required
+ "invs"
+ (Json.Decode.list Struct.BattleSummary.decoder)
+ )
+ |> (Json.Decode.Pipeline.required
+ "evts"
+ (Json.Decode.list Struct.BattleSummary.decoder)
+ )
+ |> (Json.Decode.Pipeline.required "rtid" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "ivid" Json.Decode.string)
+ )
+
+none : Type
+none =
+ {
+ id = "",
+ name = "Unknown",
+ maps = [],
+ campaigns = [],
+ invasions = [],
+ events = [],
+ roster_id = "",
+ inventory_id = ""
+ }
diff --git a/src/Struct/ServerReply.elm b/src/Struct/ServerReply.elm
new file mode 100644
index 0000000..fb4967b
--- /dev/null
+++ b/src/Struct/ServerReply.elm
@@ -0,0 +1,23 @@
+module Struct.ServerReply exposing (Type(..))
+
+-- Elm -------------------------------------------------------------------------
+
+-- Main Menu -------------------------------------------------------------------
+import Struct.Player
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+type Type =
+ Okay
+ | Disconnected
+ | SetPlayer Struct.Player.Type
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
diff --git a/src/Struct/UI.elm b/src/Struct/UI.elm
new file mode 100644
index 0000000..6cf853c
--- /dev/null
+++ b/src/Struct/UI.elm
@@ -0,0 +1,62 @@
+module Struct.UI exposing
+ (
+ Type,
+ Tab(..),
+ default,
+ -- Tab
+ try_getting_displayed_tab,
+ set_displayed_tab,
+ reset_displayed_tab,
+ to_string
+ )
+
+-- Main Menu -------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type Tab =
+ CampaignsTab
+ | InvasionsTab
+ | EventsTab
+ | CharactersTab
+ | MapsEditorTab
+ | AccountTab
+
+type alias Type =
+ {
+ displayed_tab : (Maybe Tab)
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+default : Type
+default =
+ {
+ displayed_tab = Nothing
+ }
+
+-- Tab -------------------------------------------------------------------------
+try_getting_displayed_tab : Type -> (Maybe Tab)
+try_getting_displayed_tab ui = ui.displayed_tab
+
+set_displayed_tab : Tab -> Type -> Type
+set_displayed_tab tab ui = {ui | displayed_tab = (Just tab)}
+
+reset_displayed_tab : Type -> Type
+reset_displayed_tab ui = {ui | displayed_tab = Nothing}
+
+to_string : Tab -> String
+to_string tab =
+ case tab of
+ CampaignsTab -> "Campaigns"
+ InvasionsTab -> "Invasions"
+ EventsTab -> "Events"
+ CharactersTab -> "Character Editor"
+ MapsEditorTab -> "Map Editor"
+ AccountTab -> "Account Settings"