47 lines
1.2 KiB
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_")
|
|
}
|
|
}
|