//
//  EventSenderError.swift
//  NuguCore
//
//  Created by childc on 2020/03/04.
//  Copyright (c) 2020 SK Telecom Co., Ltd. All rights reserved.
//
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.
//

import Foundation

/// An error that occurs while sending the event.
public enum EventSenderError: Error, CustomStringConvertible {
    /// Requested to send an event with a duplicate ID.
    case requestMultipleEvents
    /// Requested to send an attachment without event.
    case noEventRequested
    /// An error occurred while executing `OutputStream.write`.
    case streamBlocked
    /// An error occurred while executing `OutputStream.write`.
    case streamError(_ streamError: Error)
    /// An error occurred while executing `OutputStream.write`.
    case cannotBindMemory
    
    public var description: String {
        switch self {
        case .requestMultipleEvents:
            return "Request multiple events"
        case .noEventRequested:
            return "No event Requested before"
        case .streamBlocked:
            return "Stream is blocked"
        case .streamError(let error):
            return "Stream error: \(error)"
        case .cannotBindMemory:
            return "Cannot bind memory"
        }
    }
}
