mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			79 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Swift
		
	
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
 | 
						|
//
 | 
						|
// stringlint:disable
 | 
						|
 | 
						|
import Foundation
 | 
						|
import SessionUtil
 | 
						|
 | 
						|
public enum LibSessionError: Error, CustomStringConvertible {
 | 
						|
    case unableToCreateConfigObject
 | 
						|
    case nilConfigObject
 | 
						|
    case userDoesNotExist
 | 
						|
    case getOrConstructFailedUnexpectedly
 | 
						|
    case processingLoopLimitReached
 | 
						|
    case invalidCConversion
 | 
						|
    case unableToGeneratePushData
 | 
						|
    
 | 
						|
    case libSessionError(String)
 | 
						|
    case unknown
 | 
						|
    
 | 
						|
    public init(_ cError: [CChar]) {
 | 
						|
        self = LibSessionError.libSessionError(String(cString: cError))
 | 
						|
    }
 | 
						|
    
 | 
						|
    public init(_ errorString: String) {
 | 
						|
        switch errorString {
 | 
						|
            default: self = LibSessionError.libSessionError(errorString)
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    public init?(_ conf: UnsafeMutablePointer<config_object>?) {
 | 
						|
        guard let lastErrorPtr: UnsafePointer<CChar> = conf?.pointee.last_error else { return nil }
 | 
						|
 | 
						|
        let errorString = String(cString: lastErrorPtr)
 | 
						|
        conf?.pointee.last_error = nil // Clear the last error so subsequent calls don't get confused
 | 
						|
        self = LibSessionError.libSessionError(errorString)
 | 
						|
    }
 | 
						|
    
 | 
						|
    public init(
 | 
						|
        _ conf: UnsafeMutablePointer<config_object>?,
 | 
						|
        fallbackError: LibSessionError,
 | 
						|
        logMessage: String? = nil
 | 
						|
    ) {
 | 
						|
        self = (LibSessionError(conf) ?? fallbackError)
 | 
						|
 | 
						|
        if let logMessage: String = logMessage {
 | 
						|
            Log.error("\(logMessage): \(self)")
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    public static func throwIfNeeded(
 | 
						|
        _ conf: UnsafeMutablePointer<config_object>?,
 | 
						|
        beforeThrow: (() -> ())? = nil
 | 
						|
    ) throws {
 | 
						|
        guard let error: LibSessionError = LibSessionError(conf) else { return }
 | 
						|
        
 | 
						|
        beforeThrow?()
 | 
						|
        throw error
 | 
						|
    }
 | 
						|
    
 | 
						|
    public static func clear(_ conf: UnsafeMutablePointer<config_object>?) {
 | 
						|
        conf?.pointee.last_error = nil
 | 
						|
    }
 | 
						|
    
 | 
						|
    public var description: String {
 | 
						|
        switch self {
 | 
						|
            case .unableToCreateConfigObject: return "Unable to create config object (LibSessionError.unableToCreateConfigObject)."
 | 
						|
            case .nilConfigObject: return "Null config object (LibSessionError.nilConfigObject)."
 | 
						|
            case .userDoesNotExist: return "User does not exist (LibSessionError.userDoesNotExist)."
 | 
						|
            case .getOrConstructFailedUnexpectedly: return "'getOrConstruct' failed unexpectedly (LibSessionError.getOrConstructFailedUnexpectedly)."
 | 
						|
            case .processingLoopLimitReached: return "Processing loop limit reached (LibSessionError.processingLoopLimitReached)."
 | 
						|
            case .invalidCConversion: return "Invalid conversation to C type (LibSessionError.invalidCConversion)."
 | 
						|
            case .unableToGeneratePushData: return "Unable to generate push data (LibSessionError.unableToGeneratePushData)."
 | 
						|
            
 | 
						|
            case .libSessionError(let error): return "\(error)\(error.hasSuffix(".") ? "" : ".")"
 | 
						|
            case .unknown: return "An unknown error occurred (LibSessionError.unknown)."
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |