Module: Ask::MCP::Native::Messages::Parser

Defined in:
lib/ask/mcp/native/messages.rb

Class Method Summary collapse

Class Method Details

.parse(json_string) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/ask/mcp/native/messages.rb', line 89

def self.parse(json_string)
  data = JSON.parse(json_string, symbolize_names: true)
  return data unless data.is_a?(Hash)

  if data.key?(:id) && (data.key?(:result) || data.key?(:error))
    Response.new(
      id: data[:id],
      result: data[:result],
      error: data[:error]
    )
  elsif data.key?(:method) && data.key?(:id)
    Request.new(
      method: data[:method],
      params: data[:params],
      id: data[:id]
    )
  elsif data.key?(:method) && !data.key?(:id)
    Notification.new(
      method: data[:method],
      params: data[:params]
    )
  else
    data
  end
end

.parse_request(json_string) ⇒ Object

Raises:



121
122
123
124
125
# File 'lib/ask/mcp/native/messages.rb', line 121

def self.parse_request(json_string)
  msg = parse(json_string)
  raise ProtocolError, "Expected a Request, got #{msg.class}" unless msg.is_a?(Request)
  msg
end

.parse_response(json_string) ⇒ Object

Raises:



115
116
117
118
119
# File 'lib/ask/mcp/native/messages.rb', line 115

def self.parse_response(json_string)
  msg = parse(json_string)
  raise ProtocolError, "Expected a Response, got #{msg.class}" unless msg.is_a?(Response)
  msg
end