 }
 
 extension ObjectEncoder {
-    class Encoder: Swift.Encoder {
-        fileprivate var object: Any = [:]
+    public class Encoder: Swift.Encoder {
+        public final var object: Any = [:]
 
         fileprivate typealias Options = ObjectEncoder.Options
         fileprivate let options: Options

        return _UnkeyedEncodingContainer(referencing: self)
    }

    func singleValueContainer() -> SingleValueEncodingContainer { return self }

    // MARK: -



    // MARK: - Swift.SingleValueEncodingContainer Methods

    public final func encodeNil()             throws { assertCanEncodeNewValue(); object = NSNull() }
    public final func encode(_ value: Bool)   throws { try box(value) }
    public final func encode(_ value: Int)    throws { try box(value) }
    public final func encode(_ value: Int8)   throws { try box(value) }
    public final func encode(_ value: Int16)  throws { try box(value) }
    public final func encode(_ value: Int32)  throws { try box(value) }
    public final func encode(_ value: Int64)  throws { try box(value) }
    public final func encode(_ value: UInt)   throws { try box(value) }
    public final func encode(_ value: UInt8)  throws { try box(value) }
    public final func encode(_ value: UInt16) throws { try box(value) }
    public final func encode(_ value: UInt32) throws { try box(value) }
    public final func encode(_ value: UInt64) throws { try box(value) }
    public final func encode(_ value: Float)  throws { try box(value) }
    public final func encode(_ value: Double) throws { try box(value) }
    public final func encode(_ value: String) throws { try box(value) }

    public final func encode<T>(_ value: T) throws where T: Encodable {
        assertCanEncodeNewValue()
        if try !applyStrategy(value) {
            try value.encode(to: self)
