mastodon-app-ufficiale-ipho.../MastodonSDK/Sources/CoreDataStack/Entity/Transient/Acct.swift

47 lines
1.2 KiB
Swift

//
// Feed+Acct.swift
// Feed+Acct
//
// Created by Cirno MainasuK on 2021-8-26.
// Copyright © 2021 Twidere. All rights reserved.
//
import Foundation
extension Feed {
public enum Acct: RawRepresentable {
case none
case mastodon(domain: String, userID: MastodonUser.ID)
public init?(rawValue: String) {
let components = rawValue.split(separator: "@", maxSplits: 2)
guard components.count == 3 else { return nil }
let userID = String(components[1]).escape
let domain = String(components[2]).escape
switch components[0] {
case "M":
self = .mastodon(domain: domain, userID: userID)
default:
self = .none
}
}
public var rawValue: String {
switch self {
case .none:
return "none@userID@domain"
case .mastodon(let domain, let userID):
return "M@\(userID.escape)@\(domain.escape)"
}
}
}
}
extension String {
fileprivate var escape: String {
replacingOccurrences(of: "@", with: "_at_")
}
}