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.
		
		
		
		
		
			
		
			
				
	
	
		
			128 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			128 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Swift
		
	
// Copyright © 2024 Rangeproof Pty Ltd. All rights reserved.
 | 
						|
//
 | 
						|
// stringlint:disable
 | 
						|
 | 
						|
import Foundation
 | 
						|
 | 
						|
public enum TimeUnit: Equatable, CustomStringConvertible {
 | 
						|
    case nanoseconds(Double)
 | 
						|
    case microseconds(Double)
 | 
						|
    case milliseconds(Double)
 | 
						|
    case seconds(Double)
 | 
						|
    case minutes(Double)
 | 
						|
    case hours(Double)
 | 
						|
    case days(Double)
 | 
						|
    case weeks(Double)
 | 
						|
    
 | 
						|
    public var timeInterval: TimeInterval {
 | 
						|
        switch self {
 | 
						|
            case .nanoseconds(let value): return (value * 1e-9)
 | 
						|
            case .microseconds(let value): return (value * 1e-6)
 | 
						|
            case .milliseconds(let value): return (value * 1e-3)
 | 
						|
            case .seconds(let value): return value
 | 
						|
            case .minutes(let value): return (value * 60)
 | 
						|
            case .hours(let value): return (value * 3600)
 | 
						|
            case .days(let value): return (value * 86400)
 | 
						|
            case .weeks(let value): return (value * 604800)
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    var unit: Unit {
 | 
						|
        switch self {
 | 
						|
            case .nanoseconds: return .nanoseconds
 | 
						|
            case .microseconds: return .microseconds
 | 
						|
            case .milliseconds: return .milliseconds
 | 
						|
            case .seconds: return .seconds
 | 
						|
            case .minutes: return .minutes
 | 
						|
            case .hours: return .hours
 | 
						|
            case .days: return .days
 | 
						|
            case .weeks: return .weeks
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    public var description: String {
 | 
						|
        switch self {
 | 
						|
            case .nanoseconds(let value): return "\(value)\(unit)"
 | 
						|
            case .microseconds(let value): return "\(value)\(unit)"
 | 
						|
            case .milliseconds(let value): return "\(value)\(unit)"
 | 
						|
            case .seconds(let value): return "\(value)\(unit)"
 | 
						|
            case .minutes(let value): return "\(value)\(unit)"
 | 
						|
            case .hours(let value): return "\(value)\(unit)"
 | 
						|
            case .days(let value): return "\(value)\(unit)"
 | 
						|
            case .weeks(let value): return "\(value)\(unit)"
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    public init(_ other: TimeUnit, unit: Unit, resolution: Int? = nil) {
 | 
						|
        let otherSeconds: TimeInterval = other.timeInterval
 | 
						|
        let convertedValue: Double = {
 | 
						|
            switch unit {
 | 
						|
                case .nanoseconds: return (otherSeconds / 1e-9)
 | 
						|
                case .microseconds: return (otherSeconds / 1e-6)
 | 
						|
                case .milliseconds: return (otherSeconds / 1e-3)
 | 
						|
                case .seconds: return (otherSeconds)
 | 
						|
                case .minutes: return (otherSeconds / 60)
 | 
						|
                case .hours: return (otherSeconds / 3600)
 | 
						|
                case .days: return (otherSeconds / 86400)
 | 
						|
                case .weeks: return (otherSeconds / 604800)
 | 
						|
            }
 | 
						|
        }()
 | 
						|
        let result: Double = {
 | 
						|
            guard let resolution: Int = resolution else { return convertedValue }
 | 
						|
            guard resolution > 0 else { return floor(convertedValue) }
 | 
						|
            
 | 
						|
            let targetResolution: TimeInterval = pow(10, TimeInterval(resolution))
 | 
						|
            
 | 
						|
            return (floor(convertedValue * targetResolution) / targetResolution)
 | 
						|
        }()
 | 
						|
        
 | 
						|
        switch unit {
 | 
						|
            case .nanoseconds: self = .nanoseconds(result)
 | 
						|
            case .microseconds: self = .microseconds(result)
 | 
						|
            case .milliseconds: self = .milliseconds(result)
 | 
						|
            case .seconds: self = .seconds(result)
 | 
						|
            case .minutes: self = .minutes(result)
 | 
						|
            case .hours: self = .hours(result)
 | 
						|
            case .days: self = .days(result)
 | 
						|
            case .weeks: self = .weeks(result)
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// MARK: - TimeUnit.Unit
 | 
						|
 | 
						|
public extension TimeUnit {
 | 
						|
    enum Unit: CustomStringConvertible {
 | 
						|
        case nanoseconds
 | 
						|
        case microseconds
 | 
						|
        case milliseconds
 | 
						|
        case seconds
 | 
						|
        case minutes
 | 
						|
        case hours
 | 
						|
        case days
 | 
						|
        case weeks
 | 
						|
        
 | 
						|
        public static var ns: Unit = .nanoseconds
 | 
						|
        public static var us: Unit = .microseconds   //µs
 | 
						|
        public static var ms: Unit = .milliseconds
 | 
						|
        public static var s: Unit = .seconds
 | 
						|
        public static var m: Unit = .minutes
 | 
						|
        public static var h: Unit = .hours
 | 
						|
        public static var d: Unit = .days
 | 
						|
        public static var w: Unit = .weeks
 | 
						|
        
 | 
						|
        public var description: String {
 | 
						|
            switch self {
 | 
						|
                case .nanoseconds: return "ns"
 | 
						|
                case .microseconds: return "µs"
 | 
						|
                case .milliseconds: return "ms"
 | 
						|
                case .seconds: return "s"
 | 
						|
                case .minutes: return "m"
 | 
						|
                case .hours: return "h"
 | 
						|
                case .days: return "d"
 | 
						|
                case .weeks: return "w"
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |