Skip to content
Snippets Groups Projects
MessengerRegister.swift 1.12 KiB
Newer Older
import XXClient
import XCTestDynamicOverlay

Dariusz Rybicki's avatar
Dariusz Rybicki committed
public struct MessengerRegister {
  public enum Error: Swift.Error, Equatable {
    case notLoaded
    case notConnected
  }

  public var run: (String) throws -> Void

  public func callAsFunction(
    username: String
  ) throws {
    try run(username)
  }
}

Dariusz Rybicki's avatar
Dariusz Rybicki committed
extension MessengerRegister {
  public static func live(_ env: MessengerEnvironment) -> MessengerRegister {
    MessengerRegister { username in
Dariusz Rybicki's avatar
Dariusz Rybicki committed
      guard let cMix = env.cMix() else {
        throw Error.notLoaded
      }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
      guard let e2e = env.e2e() else {
        throw Error.notConnected
      }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
      env.ud.set(try env.newOrLoadUd(
        params: .init(
          e2eId: e2e.getId(),
          username: username,
          registrationValidationSignature: cMix.getReceptionRegistrationValidationSignature(),
          environment: env.udEnvironment ?? (try e2e.getUdEnvironmentFromNdf())
        ),
        follower: .init {
          cMix.networkFollowerStatus()
Dariusz Rybicki's avatar
Dariusz Rybicki committed
extension MessengerRegister {
  public static let unimplemented = MessengerRegister(
    run: XCTUnimplemented("\(Self.self)")