// Endpoints.swift
//
// Copyright (c) 2015 - 2016, Justin Pawela & The LogKit Project
// http://www.logkit.info/
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.


/// Objects that conform to the Endpoint protocol may be used by an `LXLogger` instance as Log Entry destinations.
public protocol LXEndpoint {

    /// The minimum Priority Level a Log Entry must meet to be accepted by this Endpoint.
    var minimumPriorityLevel: LXPriorityLevel { get }
    /// The formatter used by this Endpoint to serialize a Log Entry’s `dateTime` property to a string.
    var dateFormatter: LXDateFormatter { get }
    /// The formatter used by this Endpoint to serialize each Log Entry to a string.
    var entryFormatter: LXEntryFormatter { get }
    /// Indicates whether this Endpoint requires a newline character appended to each serialized Log Entry string.
    var requiresNewlines: Bool { get }

    /// Writes a serialized Log Entry string to the final destination this Endpoint represents.
    ///
    /// - parameter string: The Log Entry, after being serialized to a string by the `entryFormatter`.
    func write(string: String) -> Void

}
