Ponyboy47/Pathman

View on GitHub
Sources/Pathman/Writable/Writable+Helpers.swift

Summary

Maintainability
A
3 hrs
Test Coverage
import struct Foundation.Data

public extension Writable {
    @discardableResult
    func write(_ string: String,
               using encoding: String.Encoding = .utf8) throws -> Int {
        let data = try string.data(using: encoding) ?! StringError.notConvertibleToData(using: encoding)
        return try write(data)
    }
}

public extension Writable where Self: Seekable {
    @discardableResult
    func write(_ buffer: Data, at offset: Offset) throws -> Int {
        try seek(offset)
        return try write(buffer)
    }

    @discardableResult
    func write(_ string: String,
               at offset: Offset,
               using encoding: String.Encoding = .utf8) throws -> Int {
        let data = try string.data(using: encoding) ?! StringError.notConvertibleToData(using: encoding)
        return try write(data, at: offset)
    }
}

public extension WritableWithFlags {
    @discardableResult
    func write(_ buffer: Data) throws -> Int {
        return try write(buffer, flags: Self.emptyWriteFlags)
    }

    @discardableResult
    func write(_ string: String,
               flags: WriteFlagsType,
               using encoding: String.Encoding = .utf8) throws -> Int {
        let data = try string.data(using: encoding) ?! StringError.notConvertibleToData(using: encoding)
        return try write(data, flags: flags)
    }
}

public extension WritableWithFlags where Self: Seekable {
    @discardableResult
    func write(_ buffer: Data,
               flags: WriteFlagsType,
               at offset: Offset) throws -> Int {
        try seek(offset)
        return try write(buffer, flags: flags)
    }

    @discardableResult
    func write(_ string: String,
               flags: WriteFlagsType,
               at offset: Offset,
               using encoding: String.Encoding = .utf8) throws -> Int {
        let data = try string.data(using: encoding) ?! StringError.notConvertibleToData(using: encoding)
        return try write(data, flags: flags, at: offset)
    }
}