@@ -128,17 +128,17 @@ struct StackTraceArguments {
128#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
128#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
129#[serde(rename_all = "camelCase")]
129#[serde(rename_all = "camelCase")]
130pub struct StackFrame {
130pub struct StackFrame {
131− id: usize,
131+ pub id: usize,
132− name: String,
132+ pub name: String,
133− source: Option<Source>,
133+ pub source: Option<Source>,
134− line: usize,
134+ pub line: usize,
135− column: usize,
135+ pub column: usize,
136− end_line: Option<usize>,
136+ pub end_line: Option<usize>,
137− end_column: Option<usize>,
137+ pub end_column: Option<usize>,
138− can_restart: Option<bool>,
138+ pub can_restart: Option<bool>,
139− instruction_pointer_reference: Option<String>,
139+ pub instruction_pointer_reference: Option<String>,
140 // module_id
140 // module_id
141− presentation_hint: Option<String>,
141+ pub presentation_hint: Option<String>,
144#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
144#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
@@ -151,8 +151,8 @@ struct StackTraceResponseBody {
151#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
151#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
152#[serde(rename_all = "camelCase")]
152#[serde(rename_all = "camelCase")]
153pub struct Thread {
153pub struct Thread {
154− id: usize,
154+ pub id: usize,
155− name: String,
155+ pub name: String,
158#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
158#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
@@ -161,6 +161,79 @@ struct ThreadsResponseBody {
161 threads: Vec<Thread>,
161 threads: Vec<Thread>,
164+#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
165+#[serde(rename_all = "camelCase")]
166+struct ScopesArguments {
170+#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
171+#[serde(rename_all = "camelCase")]
174+ pub presentation_hint: Option<String>,
175+ pub variables_reference: usize,
176+ pub named_variables: Option<usize>,
177+ pub indexed_variables: Option<usize>,
178+ pub expensive: bool,
179+ pub source: Option<Source>,
180+ pub line: Option<usize>,
181+ pub column: Option<usize>,
182+ pub end_line: Option<usize>,
183+ pub end_column: Option<usize>,
186+#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
187+#[serde(rename_all = "camelCase")]
188+struct ScopesResponseBody {
192+#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
193+#[serde(rename_all = "camelCase")]
198+#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
199+#[serde(rename_all = "camelCase")]
200+struct VariablesArguments {
201+ variables_reference: usize,
202+ filter: Option<String>,
203+ start: Option<usize>,
204+ count: Option<usize>,
205+ format: Option<ValueFormat>,
208+#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
209+#[serde(rename_all = "camelCase")]
210+pub struct VariablePresentationHint {
211+ pub kind: Option<String>,
212+ pub attributes: Option<Vec<String>>,
213+ pub visibility: Option<String>,
216+#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
217+#[serde(rename_all = "camelCase")]
218+pub struct Variable {
221+ #[serde(rename = "type")]
222+ pub data_type: Option<String>,
223+ pub presentation_hint: Option<VariablePresentationHint>,
224+ pub evaluate_name: Option<String>,
225+ pub variables_reference: usize,
226+ pub named_variables: Option<usize>,
227+ pub indexed_variables: Option<usize>,
228+ pub memory_reference: Option<String>,
231+#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
232+#[serde(rename_all = "camelCase")]
233+struct VariablesResponseBody {
234+ variables: Vec<Variable>,
164#[derive(Debug)]
237#[derive(Debug)]
165pub struct Client {
238pub struct Client {
166 id: usize,
239 id: usize,
@@ -370,4 +443,34 @@ impl Client {
371 Ok(body.threads)
444 Ok(body.threads)
447+ pub async fn scopes(&mut self, frame_id: usize) -> Result<Vec<Scope>> {
448+ let args = ScopesArguments { frame_id };
451+ .request("scopes".to_owned(), to_value(args).ok())
454+ let body: ScopesResponseBody = from_value(response.body.unwrap()).unwrap();
459+ pub async fn variables(&mut self, variables_reference: usize) -> Result<Vec<Variable>> {
460+ let args = VariablesArguments {
461+ variables_reference,
469+ .request("variables".to_owned(), to_value(args).ok())
472+ let body: VariablesResponseBody = from_value(response.body.unwrap()).unwrap();