64 lines
868 B
Crystal
64 lines
868 B
Crystal
require "uuid"
|
|
|
|
class Token
|
|
JSON.mapping({
|
|
uid: Int32,
|
|
login: String
|
|
})
|
|
|
|
def initialize(@uid, @login)
|
|
end
|
|
end
|
|
|
|
class FileInfo
|
|
JSON.mapping({
|
|
name: String,
|
|
size: UInt32,
|
|
tags: Array(String)?
|
|
})
|
|
|
|
def initialize(@name, @size, @tags = nil)
|
|
end
|
|
|
|
def initialize(file : File, @tags = nil)
|
|
@name = file.basename
|
|
@size = file.size
|
|
end
|
|
end
|
|
|
|
class AuthenticationMessage
|
|
JSON.mapping({
|
|
mid: String,
|
|
token: Token,
|
|
files: Array(FileInfo),
|
|
tags: Array(String)?
|
|
})
|
|
|
|
def initialize(@token, @files, @tags = nil)
|
|
@mid = UUID.random.to_s
|
|
end
|
|
end
|
|
|
|
class Response
|
|
JSON.mapping({
|
|
mid: String,
|
|
response: String,
|
|
reason: String?
|
|
})
|
|
|
|
def initialize(@mid, @response, @reason = nil)
|
|
end
|
|
end
|
|
|
|
class Transfer
|
|
JSON.mapping({
|
|
mid: String,
|
|
chunk: String,
|
|
data: Slice(UInt8)
|
|
})
|
|
|
|
def initialize(@chunk, @data)
|
|
@mid = UUID.random.to_s
|
|
end
|
|
end
|