1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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 = []
}
|