From 6ab6377e759f18ae642212fdb1821d8f8be37585 Mon Sep 17 00:00:00 2001
From: Andrew Heard <andrewheard@google.com>
Date: Wed, 28 Feb 2024 12:13:35 -0500
Subject: [PATCH] Init numbers as `Decimal` before encoding

---
 Sources/GoogleAI/JSONValue.swift         | 2 +-
 Tests/GoogleAITests/JSONValueTests.swift | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/Sources/GoogleAI/JSONValue.swift b/Sources/GoogleAI/JSONValue.swift
index f32fdb5..a279e91 100644
--- a/Sources/GoogleAI/JSONValue.swift
+++ b/Sources/GoogleAI/JSONValue.swift
@@ -75,7 +75,7 @@ extension JSONValue: Encodable {
     case .null:
       try container.encodeNil()
     case let .number(numberValue):
-      try container.encode(numberValue)
+      try container.encode(Decimal(numberValue))
     case let .string(stringValue):
       try container.encode(stringValue)
     case let .bool(boolValue):
diff --git a/Tests/GoogleAITests/JSONValueTests.swift b/Tests/GoogleAITests/JSONValueTests.swift
index bea4707..19c871e 100644
--- a/Tests/GoogleAITests/JSONValueTests.swift
+++ b/Tests/GoogleAITests/JSONValueTests.swift
@@ -21,6 +21,7 @@ final class JSONValueTests: XCTestCase {
 
   let numberKey = "pi"
   let numberValue = 3.14159
+  let numberValueEncoded = "3.14159"
   let stringKey = "hello"
   let stringValue = "Hello, world!"
 
@@ -127,7 +128,10 @@ final class JSONValueTests: XCTestCase {
     let jsonData = try encoder.encode(JSONValue.object(objectValue))
 
     let json = try XCTUnwrap(String(data: jsonData, encoding: .utf8))
-    XCTAssertEqual(json, "{\"\(stringKey)\":\"\(stringValue)\",\"\(numberKey)\":\(numberValue)}")
+    XCTAssertEqual(
+      json,
+      "{\"\(stringKey)\":\"\(stringValue)\",\"\(numberKey)\":\(numberValueEncoded)}"
+    )
   }
 
   func testEncodeArray() throws {
@@ -136,6 +140,6 @@ final class JSONValueTests: XCTestCase {
     let jsonData = try encoder.encode(JSONValue.array(arrayValue))
 
     let json = try XCTUnwrap(String(data: jsonData, encoding: .utf8))
-    XCTAssertEqual(json, "[null,\(numberValue)]")
+    XCTAssertEqual(json, "[null,\(numberValueEncoded)]")
   }
 }