1#![allow(unused_imports)]
35use crate::{
36 client::Elasticsearch,
37 error::Error,
38 http::{
39 self,
40 headers::{HeaderMap, HeaderName, HeaderValue, ACCEPT, CONTENT_TYPE},
41 request::{Body, JsonBody, NdBody, PARTS_ENCODED},
42 response::Response,
43 transport::Transport,
44 },
45 params::*,
46};
47use percent_encoding::percent_encode;
48use serde::Serialize;
49use std::{borrow::Cow, time::Duration};
50#[derive(Debug, Clone, PartialEq, Eq)]
51#[doc = "API parts for the Eql Delete API"]
52pub enum EqlDeleteParts<'b> {
53 #[doc = "Id"]
54 Id(&'b str),
55}
56impl<'b> EqlDeleteParts<'b> {
57 #[doc = "Builds a relative URL path to the Eql Delete API"]
58 pub fn url(self) -> Cow<'static, str> {
59 match self {
60 EqlDeleteParts::Id(id) => {
61 let encoded_id: Cow<str> = percent_encode(id.as_bytes(), PARTS_ENCODED).into();
62 let mut p = String::with_capacity(13usize + encoded_id.len());
63 p.push_str("/_eql/search/");
64 p.push_str(encoded_id.as_ref());
65 p.into()
66 }
67 }
68 }
69}
70#[doc = "Builder for the [Eql Delete API](https://www.elastic.co/guide/en/elasticsearch/reference/9.0/eql-search-api.html)\n\nDeletes an async EQL search by ID. If the search is still running, the search request will be cancelled. Otherwise, the saved search results are deleted."]
71#[derive(Clone, Debug)]
72pub struct EqlDelete<'a, 'b> {
73 transport: &'a Transport,
74 parts: EqlDeleteParts<'b>,
75 error_trace: Option<bool>,
76 filter_path: Option<&'b [&'b str]>,
77 headers: HeaderMap,
78 human: Option<bool>,
79 pretty: Option<bool>,
80 request_timeout: Option<Duration>,
81 source: Option<&'b str>,
82}
83impl<'a, 'b> EqlDelete<'a, 'b> {
84 #[doc = "Creates a new instance of [EqlDelete] with the specified API parts"]
85 pub fn new(transport: &'a Transport, parts: EqlDeleteParts<'b>) -> Self {
86 let headers = HeaderMap::new();
87 EqlDelete {
88 transport,
89 parts,
90 headers,
91 error_trace: None,
92 filter_path: None,
93 human: None,
94 pretty: None,
95 request_timeout: None,
96 source: None,
97 }
98 }
99 #[doc = "Include the stack trace of returned errors."]
100 pub fn error_trace(mut self, error_trace: bool) -> Self {
101 self.error_trace = Some(error_trace);
102 self
103 }
104 #[doc = "A comma-separated list of filters used to reduce the response."]
105 pub fn filter_path(mut self, filter_path: &'b [&'b str]) -> Self {
106 self.filter_path = Some(filter_path);
107 self
108 }
109 #[doc = "Adds a HTTP header"]
110 pub fn header(mut self, key: HeaderName, value: HeaderValue) -> Self {
111 self.headers.insert(key, value);
112 self
113 }
114 #[doc = "Return human readable values for statistics."]
115 pub fn human(mut self, human: bool) -> Self {
116 self.human = Some(human);
117 self
118 }
119 #[doc = "Pretty format the returned JSON response."]
120 pub fn pretty(mut self, pretty: bool) -> Self {
121 self.pretty = Some(pretty);
122 self
123 }
124 #[doc = "Sets a request timeout for this API call.\n\nThe timeout is applied from when the request starts connecting until the response body has finished."]
125 pub fn request_timeout(mut self, timeout: Duration) -> Self {
126 self.request_timeout = Some(timeout);
127 self
128 }
129 #[doc = "The URL-encoded request definition. Useful for libraries that do not accept a request body for non-POST requests."]
130 pub fn source(mut self, source: &'b str) -> Self {
131 self.source = Some(source);
132 self
133 }
134 #[doc = "Creates an asynchronous call to the Eql Delete API that can be awaited"]
135 pub async fn send(self) -> Result<Response, Error> {
136 let path = self.parts.url();
137 let method = http::Method::Delete;
138 let headers = self.headers;
139 let timeout = self.request_timeout;
140 let query_string = {
141 #[serde_with::skip_serializing_none]
142 #[derive(Serialize)]
143 struct QueryParams<'b> {
144 error_trace: Option<bool>,
145 #[serde(serialize_with = "crate::client::serialize_coll_qs")]
146 filter_path: Option<&'b [&'b str]>,
147 human: Option<bool>,
148 pretty: Option<bool>,
149 source: Option<&'b str>,
150 }
151 let query_params = QueryParams {
152 error_trace: self.error_trace,
153 filter_path: self.filter_path,
154 human: self.human,
155 pretty: self.pretty,
156 source: self.source,
157 };
158 Some(query_params)
159 };
160 let body = Option::<()>::None;
161 let response = self
162 .transport
163 .send(method, &path, headers, query_string.as_ref(), body, timeout)
164 .await?;
165 Ok(response)
166 }
167}
168#[derive(Debug, Clone, PartialEq, Eq)]
169#[doc = "API parts for the Eql Get API"]
170pub enum EqlGetParts<'b> {
171 #[doc = "Id"]
172 Id(&'b str),
173}
174impl<'b> EqlGetParts<'b> {
175 #[doc = "Builds a relative URL path to the Eql Get API"]
176 pub fn url(self) -> Cow<'static, str> {
177 match self {
178 EqlGetParts::Id(id) => {
179 let encoded_id: Cow<str> = percent_encode(id.as_bytes(), PARTS_ENCODED).into();
180 let mut p = String::with_capacity(13usize + encoded_id.len());
181 p.push_str("/_eql/search/");
182 p.push_str(encoded_id.as_ref());
183 p.into()
184 }
185 }
186 }
187}
188#[doc = "Builder for the [Eql Get API](https://www.elastic.co/guide/en/elasticsearch/reference/9.0/eql-search-api.html)\n\nReturns async results from previously executed Event Query Language (EQL) search"]
189#[derive(Clone, Debug)]
190pub struct EqlGet<'a, 'b> {
191 transport: &'a Transport,
192 parts: EqlGetParts<'b>,
193 error_trace: Option<bool>,
194 filter_path: Option<&'b [&'b str]>,
195 headers: HeaderMap,
196 human: Option<bool>,
197 keep_alive: Option<&'b str>,
198 pretty: Option<bool>,
199 request_timeout: Option<Duration>,
200 source: Option<&'b str>,
201 wait_for_completion_timeout: Option<&'b str>,
202}
203impl<'a, 'b> EqlGet<'a, 'b> {
204 #[doc = "Creates a new instance of [EqlGet] with the specified API parts"]
205 pub fn new(transport: &'a Transport, parts: EqlGetParts<'b>) -> Self {
206 let headers = HeaderMap::new();
207 EqlGet {
208 transport,
209 parts,
210 headers,
211 error_trace: None,
212 filter_path: None,
213 human: None,
214 keep_alive: None,
215 pretty: None,
216 request_timeout: None,
217 source: None,
218 wait_for_completion_timeout: None,
219 }
220 }
221 #[doc = "Include the stack trace of returned errors."]
222 pub fn error_trace(mut self, error_trace: bool) -> Self {
223 self.error_trace = Some(error_trace);
224 self
225 }
226 #[doc = "A comma-separated list of filters used to reduce the response."]
227 pub fn filter_path(mut self, filter_path: &'b [&'b str]) -> Self {
228 self.filter_path = Some(filter_path);
229 self
230 }
231 #[doc = "Adds a HTTP header"]
232 pub fn header(mut self, key: HeaderName, value: HeaderValue) -> Self {
233 self.headers.insert(key, value);
234 self
235 }
236 #[doc = "Return human readable values for statistics."]
237 pub fn human(mut self, human: bool) -> Self {
238 self.human = Some(human);
239 self
240 }
241 #[doc = "Update the time interval in which the results (partial or final) for this search will be available"]
242 pub fn keep_alive(mut self, keep_alive: &'b str) -> Self {
243 self.keep_alive = Some(keep_alive);
244 self
245 }
246 #[doc = "Pretty format the returned JSON response."]
247 pub fn pretty(mut self, pretty: bool) -> Self {
248 self.pretty = Some(pretty);
249 self
250 }
251 #[doc = "Sets a request timeout for this API call.\n\nThe timeout is applied from when the request starts connecting until the response body has finished."]
252 pub fn request_timeout(mut self, timeout: Duration) -> Self {
253 self.request_timeout = Some(timeout);
254 self
255 }
256 #[doc = "The URL-encoded request definition. Useful for libraries that do not accept a request body for non-POST requests."]
257 pub fn source(mut self, source: &'b str) -> Self {
258 self.source = Some(source);
259 self
260 }
261 #[doc = "Specify the time that the request should block waiting for the final response"]
262 pub fn wait_for_completion_timeout(mut self, wait_for_completion_timeout: &'b str) -> Self {
263 self.wait_for_completion_timeout = Some(wait_for_completion_timeout);
264 self
265 }
266 #[doc = "Creates an asynchronous call to the Eql Get API that can be awaited"]
267 pub async fn send(self) -> Result<Response, Error> {
268 let path = self.parts.url();
269 let method = http::Method::Get;
270 let headers = self.headers;
271 let timeout = self.request_timeout;
272 let query_string = {
273 #[serde_with::skip_serializing_none]
274 #[derive(Serialize)]
275 struct QueryParams<'b> {
276 error_trace: Option<bool>,
277 #[serde(serialize_with = "crate::client::serialize_coll_qs")]
278 filter_path: Option<&'b [&'b str]>,
279 human: Option<bool>,
280 keep_alive: Option<&'b str>,
281 pretty: Option<bool>,
282 source: Option<&'b str>,
283 wait_for_completion_timeout: Option<&'b str>,
284 }
285 let query_params = QueryParams {
286 error_trace: self.error_trace,
287 filter_path: self.filter_path,
288 human: self.human,
289 keep_alive: self.keep_alive,
290 pretty: self.pretty,
291 source: self.source,
292 wait_for_completion_timeout: self.wait_for_completion_timeout,
293 };
294 Some(query_params)
295 };
296 let body = Option::<()>::None;
297 let response = self
298 .transport
299 .send(method, &path, headers, query_string.as_ref(), body, timeout)
300 .await?;
301 Ok(response)
302 }
303}
304#[derive(Debug, Clone, PartialEq, Eq)]
305#[doc = "API parts for the Eql Get Status API"]
306pub enum EqlGetStatusParts<'b> {
307 #[doc = "Id"]
308 Id(&'b str),
309}
310impl<'b> EqlGetStatusParts<'b> {
311 #[doc = "Builds a relative URL path to the Eql Get Status API"]
312 pub fn url(self) -> Cow<'static, str> {
313 match self {
314 EqlGetStatusParts::Id(id) => {
315 let encoded_id: Cow<str> = percent_encode(id.as_bytes(), PARTS_ENCODED).into();
316 let mut p = String::with_capacity(20usize + encoded_id.len());
317 p.push_str("/_eql/search/status/");
318 p.push_str(encoded_id.as_ref());
319 p.into()
320 }
321 }
322 }
323}
324#[doc = "Builder for the [Eql Get Status API](https://www.elastic.co/guide/en/elasticsearch/reference/9.0/eql-search-api.html)\n\nReturns the status of a previously submitted async or stored Event Query Language (EQL) search"]
325#[derive(Clone, Debug)]
326pub struct EqlGetStatus<'a, 'b> {
327 transport: &'a Transport,
328 parts: EqlGetStatusParts<'b>,
329 error_trace: Option<bool>,
330 filter_path: Option<&'b [&'b str]>,
331 headers: HeaderMap,
332 human: Option<bool>,
333 pretty: Option<bool>,
334 request_timeout: Option<Duration>,
335 source: Option<&'b str>,
336}
337impl<'a, 'b> EqlGetStatus<'a, 'b> {
338 #[doc = "Creates a new instance of [EqlGetStatus] with the specified API parts"]
339 pub fn new(transport: &'a Transport, parts: EqlGetStatusParts<'b>) -> Self {
340 let headers = HeaderMap::new();
341 EqlGetStatus {
342 transport,
343 parts,
344 headers,
345 error_trace: None,
346 filter_path: None,
347 human: None,
348 pretty: None,
349 request_timeout: None,
350 source: None,
351 }
352 }
353 #[doc = "Include the stack trace of returned errors."]
354 pub fn error_trace(mut self, error_trace: bool) -> Self {
355 self.error_trace = Some(error_trace);
356 self
357 }
358 #[doc = "A comma-separated list of filters used to reduce the response."]
359 pub fn filter_path(mut self, filter_path: &'b [&'b str]) -> Self {
360 self.filter_path = Some(filter_path);
361 self
362 }
363 #[doc = "Adds a HTTP header"]
364 pub fn header(mut self, key: HeaderName, value: HeaderValue) -> Self {
365 self.headers.insert(key, value);
366 self
367 }
368 #[doc = "Return human readable values for statistics."]
369 pub fn human(mut self, human: bool) -> Self {
370 self.human = Some(human);
371 self
372 }
373 #[doc = "Pretty format the returned JSON response."]
374 pub fn pretty(mut self, pretty: bool) -> Self {
375 self.pretty = Some(pretty);
376 self
377 }
378 #[doc = "Sets a request timeout for this API call.\n\nThe timeout is applied from when the request starts connecting until the response body has finished."]
379 pub fn request_timeout(mut self, timeout: Duration) -> Self {
380 self.request_timeout = Some(timeout);
381 self
382 }
383 #[doc = "The URL-encoded request definition. Useful for libraries that do not accept a request body for non-POST requests."]
384 pub fn source(mut self, source: &'b str) -> Self {
385 self.source = Some(source);
386 self
387 }
388 #[doc = "Creates an asynchronous call to the Eql Get Status API that can be awaited"]
389 pub async fn send(self) -> Result<Response, Error> {
390 let path = self.parts.url();
391 let method = http::Method::Get;
392 let headers = self.headers;
393 let timeout = self.request_timeout;
394 let query_string = {
395 #[serde_with::skip_serializing_none]
396 #[derive(Serialize)]
397 struct QueryParams<'b> {
398 error_trace: Option<bool>,
399 #[serde(serialize_with = "crate::client::serialize_coll_qs")]
400 filter_path: Option<&'b [&'b str]>,
401 human: Option<bool>,
402 pretty: Option<bool>,
403 source: Option<&'b str>,
404 }
405 let query_params = QueryParams {
406 error_trace: self.error_trace,
407 filter_path: self.filter_path,
408 human: self.human,
409 pretty: self.pretty,
410 source: self.source,
411 };
412 Some(query_params)
413 };
414 let body = Option::<()>::None;
415 let response = self
416 .transport
417 .send(method, &path, headers, query_string.as_ref(), body, timeout)
418 .await?;
419 Ok(response)
420 }
421}
422#[derive(Debug, Clone, PartialEq, Eq)]
423#[doc = "API parts for the Eql Search API"]
424pub enum EqlSearchParts<'b> {
425 #[doc = "Index"]
426 Index(&'b str),
427}
428impl<'b> EqlSearchParts<'b> {
429 #[doc = "Builds a relative URL path to the Eql Search API"]
430 pub fn url(self) -> Cow<'static, str> {
431 match self {
432 EqlSearchParts::Index(index) => {
433 let encoded_index: Cow<str> =
434 percent_encode(index.as_bytes(), PARTS_ENCODED).into();
435 let mut p = String::with_capacity(13usize + encoded_index.len());
436 p.push('/');
437 p.push_str(encoded_index.as_ref());
438 p.push_str("/_eql/search");
439 p.into()
440 }
441 }
442 }
443}
444#[doc = "Builder for the [Eql Search API](https://www.elastic.co/guide/en/elasticsearch/reference/9.0/eql-search-api.html)\n\nReturns results matching a query expressed in Event Query Language (EQL)"]
445#[derive(Clone, Debug)]
446pub struct EqlSearch<'a, 'b, B> {
447 transport: &'a Transport,
448 parts: EqlSearchParts<'b>,
449 allow_partial_search_results: Option<bool>,
450 allow_partial_sequence_results: Option<bool>,
451 body: Option<B>,
452 error_trace: Option<bool>,
453 filter_path: Option<&'b [&'b str]>,
454 headers: HeaderMap,
455 human: Option<bool>,
456 keep_alive: Option<&'b str>,
457 keep_on_completion: Option<bool>,
458 pretty: Option<bool>,
459 request_timeout: Option<Duration>,
460 source: Option<&'b str>,
461 wait_for_completion_timeout: Option<&'b str>,
462}
463impl<'a, 'b, B> EqlSearch<'a, 'b, B>
464where
465 B: Body,
466{
467 #[doc = "Creates a new instance of [EqlSearch] with the specified API parts"]
468 pub fn new(transport: &'a Transport, parts: EqlSearchParts<'b>) -> Self {
469 let headers = HeaderMap::new();
470 EqlSearch {
471 transport,
472 parts,
473 headers,
474 allow_partial_search_results: None,
475 allow_partial_sequence_results: None,
476 body: None,
477 error_trace: None,
478 filter_path: None,
479 human: None,
480 keep_alive: None,
481 keep_on_completion: None,
482 pretty: None,
483 request_timeout: None,
484 source: None,
485 wait_for_completion_timeout: None,
486 }
487 }
488 #[doc = "Control whether the query should keep running in case of shard failures, and return partial results"]
489 pub fn allow_partial_search_results(mut self, allow_partial_search_results: bool) -> Self {
490 self.allow_partial_search_results = Some(allow_partial_search_results);
491 self
492 }
493 #[doc = "Control whether a sequence query should return partial results or no results at all in case of shard failures. This option has effect only if [allow_partial_search_results] is true."]
494 pub fn allow_partial_sequence_results(mut self, allow_partial_sequence_results: bool) -> Self {
495 self.allow_partial_sequence_results = Some(allow_partial_sequence_results);
496 self
497 }
498 #[doc = "The body for the API call"]
499 pub fn body<T>(self, body: T) -> EqlSearch<'a, 'b, JsonBody<T>>
500 where
501 T: Serialize,
502 {
503 EqlSearch {
504 transport: self.transport,
505 parts: self.parts,
506 body: Some(body.into()),
507 allow_partial_search_results: self.allow_partial_search_results,
508 allow_partial_sequence_results: self.allow_partial_sequence_results,
509 error_trace: self.error_trace,
510 filter_path: self.filter_path,
511 headers: self.headers,
512 human: self.human,
513 keep_alive: self.keep_alive,
514 keep_on_completion: self.keep_on_completion,
515 pretty: self.pretty,
516 request_timeout: self.request_timeout,
517 source: self.source,
518 wait_for_completion_timeout: self.wait_for_completion_timeout,
519 }
520 }
521 #[doc = "Include the stack trace of returned errors."]
522 pub fn error_trace(mut self, error_trace: bool) -> Self {
523 self.error_trace = Some(error_trace);
524 self
525 }
526 #[doc = "A comma-separated list of filters used to reduce the response."]
527 pub fn filter_path(mut self, filter_path: &'b [&'b str]) -> Self {
528 self.filter_path = Some(filter_path);
529 self
530 }
531 #[doc = "Adds a HTTP header"]
532 pub fn header(mut self, key: HeaderName, value: HeaderValue) -> Self {
533 self.headers.insert(key, value);
534 self
535 }
536 #[doc = "Return human readable values for statistics."]
537 pub fn human(mut self, human: bool) -> Self {
538 self.human = Some(human);
539 self
540 }
541 #[doc = "Update the time interval in which the results (partial or final) for this search will be available"]
542 pub fn keep_alive(mut self, keep_alive: &'b str) -> Self {
543 self.keep_alive = Some(keep_alive);
544 self
545 }
546 #[doc = "Control whether the response should be stored in the cluster if it completed within the provided [wait_for_completion] time (default: false)"]
547 pub fn keep_on_completion(mut self, keep_on_completion: bool) -> Self {
548 self.keep_on_completion = Some(keep_on_completion);
549 self
550 }
551 #[doc = "Pretty format the returned JSON response."]
552 pub fn pretty(mut self, pretty: bool) -> Self {
553 self.pretty = Some(pretty);
554 self
555 }
556 #[doc = "Sets a request timeout for this API call.\n\nThe timeout is applied from when the request starts connecting until the response body has finished."]
557 pub fn request_timeout(mut self, timeout: Duration) -> Self {
558 self.request_timeout = Some(timeout);
559 self
560 }
561 #[doc = "The URL-encoded request definition. Useful for libraries that do not accept a request body for non-POST requests."]
562 pub fn source(mut self, source: &'b str) -> Self {
563 self.source = Some(source);
564 self
565 }
566 #[doc = "Specify the time that the request should block waiting for the final response"]
567 pub fn wait_for_completion_timeout(mut self, wait_for_completion_timeout: &'b str) -> Self {
568 self.wait_for_completion_timeout = Some(wait_for_completion_timeout);
569 self
570 }
571 #[doc = "Creates an asynchronous call to the Eql Search API that can be awaited"]
572 pub async fn send(self) -> Result<Response, Error> {
573 let path = self.parts.url();
574 let method = match self.body {
575 Some(_) => http::Method::Post,
576 None => http::Method::Get,
577 };
578 let headers = self.headers;
579 let timeout = self.request_timeout;
580 let query_string = {
581 #[serde_with::skip_serializing_none]
582 #[derive(Serialize)]
583 struct QueryParams<'b> {
584 allow_partial_search_results: Option<bool>,
585 allow_partial_sequence_results: Option<bool>,
586 error_trace: Option<bool>,
587 #[serde(serialize_with = "crate::client::serialize_coll_qs")]
588 filter_path: Option<&'b [&'b str]>,
589 human: Option<bool>,
590 keep_alive: Option<&'b str>,
591 keep_on_completion: Option<bool>,
592 pretty: Option<bool>,
593 source: Option<&'b str>,
594 wait_for_completion_timeout: Option<&'b str>,
595 }
596 let query_params = QueryParams {
597 allow_partial_search_results: self.allow_partial_search_results,
598 allow_partial_sequence_results: self.allow_partial_sequence_results,
599 error_trace: self.error_trace,
600 filter_path: self.filter_path,
601 human: self.human,
602 keep_alive: self.keep_alive,
603 keep_on_completion: self.keep_on_completion,
604 pretty: self.pretty,
605 source: self.source,
606 wait_for_completion_timeout: self.wait_for_completion_timeout,
607 };
608 Some(query_params)
609 };
610 let body = self.body;
611 let response = self
612 .transport
613 .send(method, &path, headers, query_string.as_ref(), body, timeout)
614 .await?;
615 Ok(response)
616 }
617}
618#[doc = "Namespace client for Eql APIs"]
619pub struct Eql<'a> {
620 transport: &'a Transport,
621}
622impl<'a> Eql<'a> {
623 #[doc = "Creates a new instance of [Eql]"]
624 pub fn new(transport: &'a Transport) -> Self {
625 Self { transport }
626 }
627 pub fn transport(&self) -> &Transport {
628 self.transport
629 }
630 #[doc = "[Eql Delete API](https://www.elastic.co/guide/en/elasticsearch/reference/9.0/eql-search-api.html)\n\nDeletes an async EQL search by ID. If the search is still running, the search request will be cancelled. Otherwise, the saved search results are deleted."]
631 pub fn delete<'b>(&'a self, parts: EqlDeleteParts<'b>) -> EqlDelete<'a, 'b> {
632 EqlDelete::new(self.transport(), parts)
633 }
634 #[doc = "[Eql Get API](https://www.elastic.co/guide/en/elasticsearch/reference/9.0/eql-search-api.html)\n\nReturns async results from previously executed Event Query Language (EQL) search"]
635 pub fn get<'b>(&'a self, parts: EqlGetParts<'b>) -> EqlGet<'a, 'b> {
636 EqlGet::new(self.transport(), parts)
637 }
638 #[doc = "[Eql Get Status API](https://www.elastic.co/guide/en/elasticsearch/reference/9.0/eql-search-api.html)\n\nReturns the status of a previously submitted async or stored Event Query Language (EQL) search"]
639 pub fn get_status<'b>(&'a self, parts: EqlGetStatusParts<'b>) -> EqlGetStatus<'a, 'b> {
640 EqlGetStatus::new(self.transport(), parts)
641 }
642 #[doc = "[Eql Search API](https://www.elastic.co/guide/en/elasticsearch/reference/9.0/eql-search-api.html)\n\nReturns results matching a query expressed in Event Query Language (EQL)"]
643 pub fn search<'b>(&'a self, parts: EqlSearchParts<'b>) -> EqlSearch<'a, 'b, ()> {
644 EqlSearch::new(self.transport(), parts)
645 }
646}
647impl Elasticsearch {
648 #[doc = "Creates a namespace client for Eql APIs"]
649 pub fn eql(&self) -> Eql {
650 Eql::new(self.transport())
651 }
652}