git.iko.soy/parseable-macos
on master help sign in
parseable-macos/ParseableViewer/Models/ParseableFilter.swift
79 lines 2.7 kB history raw
1import Foundation
3struct FilterQuery: Codable, Hashable, Sendable {
4 var filterType: String
5 var filterQuery: String?
6 var filterBuilder: JSONValue?
8 enum CodingKeys: String, CodingKey {
9 case filterType = "filter_type"
10 case filterQuery = "filter_query"
11 case filterBuilder = "filter_builder"
12 }
14 init(filterType: String = "sql", filterQuery: String? = nil, filterBuilder: JSONValue? = nil) {
15 self.filterType = filterType
16 self.filterQuery = filterQuery
17 self.filterBuilder = filterBuilder
18 }
20 init(from decoder: Decoder) throws {
21 let container = try decoder.container(keyedBy: CodingKeys.self)
22 filterType = (try? container.decode(String.self, forKey: .filterType)) ?? "sql"
23 filterQuery = try? container.decode(String.self, forKey: .filterQuery)
24 filterBuilder = try? container.decode(JSONValue.self, forKey: .filterBuilder)
25 }
28struct ParseableFilter: Identifiable, Codable, Hashable, Sendable {
29 var filterId: String?
30 var filterName: String
31 var streamName: String
32 var query: FilterQuery
33 var version: String?
34 var userId: String?
35 var timeFilter: JSONValue?
37 var id: String {
38 filterId ?? "\(streamName):\(filterName)"
39 }
41 enum CodingKeys: String, CodingKey {
42 case filterId = "filter_id"
43 case filterName = "filter_name"
44 case streamName = "stream_name"
45 case query
46 case version
47 case userId = "user_id"
48 case timeFilter = "time_filter"
49 }
51 init(
52 filterId: String? = nil,
53 filterName: String,
54 streamName: String,
55 query: FilterQuery,
56 version: String? = nil,
57 userId: String? = nil,
58 timeFilter: JSONValue? = nil
59 ) {
60 self.filterId = filterId
61 self.filterName = filterName
62 self.streamName = streamName
63 self.query = query
64 self.version = version
65 self.userId = userId
66 self.timeFilter = timeFilter
67 }
69 init(from decoder: Decoder) throws {
70 let container = try decoder.container(keyedBy: CodingKeys.self)
71 filterId = try? container.decode(String.self, forKey: .filterId)
72 filterName = try container.decode(String.self, forKey: .filterName)
73 streamName = try container.decode(String.self, forKey: .streamName)
74 query = try container.decode(FilterQuery.self, forKey: .query)
75 version = try? container.decode(String.self, forKey: .version)
76 userId = try? container.decode(String.self, forKey: .userId)
77 timeFilter = try? container.decode(JSONValue.self, forKey: .timeFilter)
78 }