update
This commit is contained in:
@@ -457,48 +457,66 @@ binary_bytes_direct = _serialize_data(UInt8[1, 2, 3], "binary")
|
||||
```
|
||||
"""
|
||||
function _serialize_data(data::Any, type::String)
|
||||
if type == "text" # Text data - convert to UTF-8 bytes
|
||||
if isa(data, String)
|
||||
return bytes(data) # Convert string to UTF-8 bytes
|
||||
else
|
||||
error("Text data must be a String")
|
||||
end
|
||||
elseif type == "dictionary" # JSON data - serialize directly
|
||||
json_str = JSON.json(data) # Convert Julia data to JSON string
|
||||
return bytes(json_str) # Convert JSON string to bytes
|
||||
elseif type == "table" # Table data - convert to Arrow IPC stream
|
||||
io = IOBuffer() # Create in-memory buffer
|
||||
Arrow.write(io, data) # Write data as Arrow IPC stream to buffer
|
||||
return take!(io) # Return the buffer contents as bytes
|
||||
elseif type == "image" # Image data - treat as binary
|
||||
if isa(data, Vector{UInt8})
|
||||
return data # Return binary data directly
|
||||
else
|
||||
error("Image data must be Vector{UInt8}")
|
||||
end
|
||||
elseif type == "audio" # Audio data - treat as binary
|
||||
if isa(data, Vector{UInt8})
|
||||
return data # Return binary data directly
|
||||
else
|
||||
error("Audio data must be Vector{UInt8}")
|
||||
end
|
||||
elseif type == "video" # Video data - treat as binary
|
||||
if isa(data, Vector{UInt8})
|
||||
return data # Return binary data directly
|
||||
else
|
||||
error("Video data must be Vector{UInt8}")
|
||||
end
|
||||
elseif type == "binary" # Binary data - treat as binary
|
||||
if isa(data, IOBuffer) # Check if data is an IOBuffer
|
||||
return take!(data) # Return buffer contents as bytes
|
||||
elseif isa(data, Vector{UInt8}) # Check if data is already binary
|
||||
return data # Return binary data directly
|
||||
else # Unsupported binary data type
|
||||
error("Binary data must be binary (Vector{UInt8} or IOBuffer)")
|
||||
end
|
||||
else # Unknown type
|
||||
error("Unknown type: $type")
|
||||
end
|
||||
""" Example on how JSON.jl convert: dictionary -> json string -> json string bytes -> json string -> json object
|
||||
d = Dict(
|
||||
"name"=>"ton",
|
||||
"age"=> 20,
|
||||
"metadata" => Dict(
|
||||
"height"=> 155,
|
||||
"wife"=> "jane"
|
||||
)
|
||||
)
|
||||
|
||||
json_str = JSON.json(d)
|
||||
json_str_bytes = Vector{UInt8}(json_str)
|
||||
json_str_2 = String(json_str_bytes)
|
||||
json_obj = JSON.parse(json_str_2)
|
||||
"""
|
||||
|
||||
if type == "text" # Text data - convert to UTF-8 bytes
|
||||
if isa(data, String)
|
||||
data_bytes = Vector{UInt8}(data) # Convert string to UTF-8 bytes
|
||||
return data_bytes
|
||||
else
|
||||
error("Text data must be a String")
|
||||
end
|
||||
elseif type == "dictionary" # JSON data - serialize directly
|
||||
json_str = JSON.json(data) # Convert Julia data to JSON string
|
||||
json_str_bytes = Vector{UInt8}(json_str) # Convert JSON string to bytes
|
||||
return json_str_bytes
|
||||
elseif type == "table" # Table data - convert to Arrow IPC stream
|
||||
io = IOBuffer() # Create in-memory buffer
|
||||
Arrow.write(io, data) # Write data as Arrow IPC stream to buffer
|
||||
return take!(io) # Return the buffer contents as bytes
|
||||
elseif type == "image" # Image data - treat as binary
|
||||
if isa(data, Vector{UInt8})
|
||||
return data # Return binary data directly
|
||||
else
|
||||
error("Image data must be Vector{UInt8}")
|
||||
end
|
||||
elseif type == "audio" # Audio data - treat as binary
|
||||
if isa(data, Vector{UInt8})
|
||||
return data # Return binary data directly
|
||||
else
|
||||
error("Audio data must be Vector{UInt8}")
|
||||
end
|
||||
elseif type == "video" # Video data - treat as binary
|
||||
if isa(data, Vector{UInt8})
|
||||
return data # Return binary data directly
|
||||
else
|
||||
error("Video data must be Vector{UInt8}")
|
||||
end
|
||||
elseif type == "binary" # Binary data - treat as binary
|
||||
if isa(data, IOBuffer) # Check if data is an IOBuffer
|
||||
return take!(data) # Return buffer contents as bytes
|
||||
elseif isa(data, Vector{UInt8}) # Check if data is already binary
|
||||
return data # Return binary data directly
|
||||
else # Unsupported binary data type
|
||||
error("Binary data must be binary (Vector{UInt8} or IOBuffer)")
|
||||
end
|
||||
else # Unknown type
|
||||
error("Unknown type: $type")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -675,7 +693,7 @@ function _deserialize_data(
|
||||
return String(data) # Convert bytes to string
|
||||
elseif type == "dictionary" # JSON data - deserialize
|
||||
json_str = String(data) # Convert bytes to string
|
||||
return JSON.parse(json_str) # Parse JSON string to Julia data structure
|
||||
return JSON.parse(json_str) # Parse JSON string to JSON object
|
||||
elseif type == "table" # Table data - deserialize Arrow IPC stream
|
||||
io = IOBuffer(data) # Create buffer from bytes
|
||||
df = Arrow.Table(io) # Read Arrow IPC format from buffer
|
||||
|
||||
Reference in New Issue
Block a user