 
     // MARK: - Swift.SingleValueEncodingContainer Methods
 
-    func encodeNil()             throws { assertCanEncodeNewValue(); object = NSNull() }
-    func encode(_ value: Bool)   throws { try box(value) }
-    func encode(_ value: Int)    throws { try box(value) }
-    func encode(_ value: Int8)   throws { try box(value) }
-    func encode(_ value: Int16)  throws { try box(value) }
-    func encode(_ value: Int32)  throws { try box(value) }
-    func encode(_ value: Int64)  throws { try box(value) }
-    func encode(_ value: UInt)   throws { try box(value) }
-    func encode(_ value: UInt8)  throws { try box(value) }
-    func encode(_ value: UInt16) throws { try box(value) }
-    func encode(_ value: UInt32) throws { try box(value) }
-    func encode(_ value: UInt64) throws { try box(value) }
-    func encode(_ value: Float)  throws { try box(value) }
-    func encode(_ value: Double) throws { try box(value) }
-    func encode(_ value: String) throws { try box(value) }
-
-    func encode<T>(_ value: T) throws where T: Encodable {
+    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)

        return .init(_KeyedEncodingContainer<Key>(referencing: self))
    }

    func unkeyedContainer() -> UnkeyedEncodingContainer {
        if canEncodeNewValue {
            object = []
        } else {

            self.codingPath = codingPath
        }

        // MARK: - Swift.Encoder properties

        public final let codingPath: [CodingKey]
        public final let userInfo: [CodingUserInfoKey: Any]
    }
}

extension ObjectEncoder.Encoder {
    // MARK: - Swift.Encoder methods

    public final func container<Key>(keyedBy type: Key.Type) -> KeyedEncodingContainer<Key> {
        if canEncodeNewValue {
            object = [:]
        } else {
