summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/Struct/BattleSummary.elm79
-rw-r--r--src/shared/Struct/Flags.elm57
-rw-r--r--src/shared/Struct/Player.elm133
3 files changed, 269 insertions, 0 deletions
diff --git a/src/shared/Struct/BattleSummary.elm b/src/shared/Struct/BattleSummary.elm
new file mode 100644
index 0000000..1947613
--- /dev/null
+++ b/src/shared/Struct/BattleSummary.elm
@@ -0,0 +1,79 @@
+module Struct.BattleSummary exposing
+ (
+ Type,
+ get_id,
+ get_name,
+ get_last_edit,
+ is_players_turn,
+ decoder,
+ encode,
+ none
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Json.Decode
+import Json.Decode.Pipeline
+
+import Json.Encode
+
+-- Extension -------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- 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)
+ )
+
+encode : Type -> Json.Encode.Value
+encode t =
+ (Json.Encode.object
+ [
+ ("id", (Json.Encode.string t.id)),
+ ("nme", (Json.Encode.string t.name)),
+ ("ldt", (Json.Encode.string t.last_edit)),
+ ("ipt", (Json.Encode.bool t.is_players_turn))
+ ]
+ )
+
+none : Type
+none =
+ {
+ id = "",
+ name = "Unknown",
+ last_edit = "Never",
+ is_players_turn = False
+ }
diff --git a/src/shared/Struct/Flags.elm b/src/shared/Struct/Flags.elm
new file mode 100644
index 0000000..29707a9
--- /dev/null
+++ b/src/shared/Struct/Flags.elm
@@ -0,0 +1,57 @@
+module Struct.Flags exposing
+ (
+ Type,
+ get_frequency,
+ get_players,
+ decoder,
+ encode
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Json.Decode
+import Json.Encode
+
+-- Extension -------------------------------------------------------------------
+import Struct.Player
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ frequency : Int,
+ players : (List Struct.Player.Type)
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_frequency : Type -> Int
+get_frequency flags = flags.frequency
+
+get_players : Type -> (List Struct.Player.Type)
+get_players flags = flags.players
+
+decoder : (Json.Decode.Decoder Type)
+decoder =
+ (Json.Decode.map2
+ Type
+ (Json.Decode.field "frequency" (Json.Decode.int))
+ (Json.Decode.field "players" (Json.Decode.list (Struct.Player.decoder)))
+ )
+
+encode : Type -> Json.Encode.Value
+encode flags =
+ (Json.Encode.object
+ [
+ ("frequency", (Json.Encode.int flags.frequency)),
+ (
+ "players",
+ (Json.Encode.list (List.map (Struct.Player.encode) flags.players))
+ )
+ ]
+ )
diff --git a/src/shared/Struct/Player.elm b/src/shared/Struct/Player.elm
new file mode 100644
index 0000000..1e8365a
--- /dev/null
+++ b/src/shared/Struct/Player.elm
@@ -0,0 +1,133 @@
+module Struct.Player exposing
+ (
+ Type,
+ get_id,
+ set_id,
+ get_query_url,
+ set_query_url,
+ get_username,
+ set_username,
+ get_campaigns,
+ get_invasions,
+ get_events,
+ set_battles,
+ has_active_battles,
+ decoder,
+ encode,
+ default
+ )
+
+-- Elm -------------------------------------------------------------------------
+import Json.Decode
+import Json.Decode.Pipeline
+import Json.Encode
+
+-- Extension -------------------------------------------------------------------
+import Struct.BattleSummary
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ id : String,
+ name : String,
+ query_url : String,
+ campaigns : (List Struct.BattleSummary.Type),
+ invasions : (List Struct.BattleSummary.Type),
+ events : (List Struct.BattleSummary.Type)
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+get_id : Type -> String
+get_id t = t.id
+
+set_id : String -> Type -> Type
+set_id str t = {t | id = str}
+
+get_username : Type -> String
+get_username t = t.name
+
+set_username : String -> Type -> Type
+set_username str t = {t | name = str}
+
+get_query_url : Type -> String
+get_query_url t = t.query_url
+
+set_query_url : String -> Type -> Type
+set_query_url str t = {t | query_url = str}
+
+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
+
+set_battles : (
+ (List Struct.BattleSummary.Type) ->
+ (List Struct.BattleSummary.Type) ->
+ (List Struct.BattleSummary.Type) ->
+ Type ->
+ Type
+ )
+set_battles campaigns invasions events t =
+ {t |
+ campaigns =
+ (List.filter (Struct.BattleSummary.is_players_turn) campaigns),
+ invasions =
+ (List.filter (Struct.BattleSummary.is_players_turn) invasions),
+ events = (List.filter (Struct.BattleSummary.is_players_turn) events)
+ }
+
+has_active_battles : Type -> Bool
+has_active_battles t =
+ (
+ (
+ (List.length t.campaigns)
+ + (List.length t.invasions)
+ + (List.length t.events)
+ )
+ > 0
+ )
+
+decoder : (Json.Decode.Decoder Type)
+decoder =
+ (Json.Decode.Pipeline.decode
+ Type
+ |> (Json.Decode.Pipeline.required "id" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "name" Json.Decode.string)
+ |> (Json.Decode.Pipeline.required "query_url" Json.Decode.string)
+ |> (Json.Decode.Pipeline.hardcoded [])
+ |> (Json.Decode.Pipeline.hardcoded [])
+ |> (Json.Decode.Pipeline.hardcoded [])
+ )
+
+encode : Type -> Json.Encode.Value
+encode t =
+ (Json.Encode.object
+ [
+ ("id", (Json.Encode.string t.id)),
+ ("name", (Json.Encode.string t.name)),
+ ("query_url", (Json.Encode.string t.query_url))
+ ]
+ )
+
+default : Type
+default =
+ {
+ id = "0",
+ name = "Username",
+ query_url = "http://127.0.0.1/",
+ campaigns = [],
+ invasions = [],
+ events = []
+ }