Tusker/Pachyderm/Sources/Pachyderm/Model/Filter.swift

63 lines
1.8 KiB
Swift
Raw Normal View History

2018-09-11 14:52:21 +00:00
//
// Filter.swift
// Pachyderm
//
// Created by Shadowfacts on 9/9/18.
// Copyright © 2018 Shadowfacts. All rights reserved.
//
import Foundation
2022-12-03 02:40:14 +00:00
public struct Filter: FilterProtocol, Decodable {
2018-09-11 14:52:21 +00:00
public let id: String
public let phrase: String
private let context: [String]
public let expiresAt: Date?
public let irreversible: Bool
public let wholeWord: Bool
2018-09-11 14:52:21 +00:00
public var contexts: [Context] {
get {
return context.compactMap(Context.init)
}
}
2022-12-03 02:40:14 +00:00
public static func update(_ filter: some FilterProtocol, phrase: String? = nil, context: [Context]? = nil, irreversible: Bool? = nil, wholeWord: Bool? = nil, expiresIn: TimeInterval? = nil) -> Request<Filter> {
2020-09-15 03:25:26 +00:00
return Request<Filter>(method: .put, path: "/api/v1/filters/\(filter.id)", body: ParametersBody([
"phrase" => (phrase ?? filter.phrase),
"irreversible" => (irreversible ?? filter.irreversible),
"whole_word" => (wholeWord ?? filter.wholeWord),
2022-12-03 02:40:14 +00:00
"expires_in" => (expiresIn ?? filter.expiresAt?.timeIntervalSinceNow),
] + "context" => (context ?? filter.contexts).contextStrings))
2018-09-11 14:52:21 +00:00
}
2022-12-03 02:40:14 +00:00
public static func delete(_ filterID: String) -> Request<Empty> {
return Request<Empty>(method: .delete, path: "/api/v1/filters/\(filterID)")
2018-09-11 14:52:21 +00:00
}
private enum CodingKeys: String, CodingKey {
case id
case phrase
case context
case expiresAt = "expires_at"
case irreversible
case wholeWord = "whole_word"
}
}
extension Filter {
2022-12-03 02:40:14 +00:00
public enum Context: String, Decodable, CaseIterable {
2018-09-11 14:52:21 +00:00
case home
case notifications
case `public`
case thread
2022-12-01 03:16:33 +00:00
case account
2018-09-11 14:52:21 +00:00
}
}
extension Array where Element == Filter.Context {
var contextStrings: [String] {
return map { $0.rawValue }
}
}