Я использую ящик twitter_stream
для извлечения данных из Twitter.API поддерживает фильтрацию данных по некоторому параметру;в моем случае я пытаюсь фильтровать, используя ограничивающий прямоугольник.Библиотека принимает Option<((f64, f64), (f64, f64))>
, поэтому я создаю кортеж в такой форме:
let bounds = ((0.59 as f64, 0.59 as f64), (0.59 as f64, 0.59 as f64));
Когда я делаю Some(bounds)
, чтобы обернуть это в Option
, я получаю тип Option<&[((f64, f64), (f64, f64))]>
Это добавляет &[]
вокруг моего кортежа, и я не понимаю, что это значит или почему он там.По-моему, это означает, что теперь есть заимствованный массив с одним элементом вокруг кортежа, но я не понимаю, зачем будет массив, и я попытался добавить .to_owned()
везде, и это ничего не изменило, поэтомуМне кажется, что я далеко от базы.
Код:
extern crate twitter_stream;
use twitter_stream::rt::{self, Future, Stream};
use twitter_stream::{Token, TwitterStreamBuilder};
fn main() {
let bounds = ((0.59 as f64, 0.59 as f64), (0.59 as f64, 0.59 as f64));
let future = TwitterStreamBuilder::filter(Token::new(
"consumer_key",
"consumer_secret",
"access_token",
"access_secret",
))
.locations(Some(bounds))
.listen()
.unwrap()
.flatten_stream()
.for_each(|json| {
println!("{}", json);
Ok(())
})
.map_err(|e| println!("error: {}", e));
rt::run(future);
}
Ошибка:
error[E0277]: the trait bound `std::option::Option<&[((f64, f64), (f64, f64))]>: std::convert::From<std::option::Option<((f64, f64), (f64, f64))>>` is not satisfied
--> src/main.rs:9:14
|
9 | .locations(Some(bounds))
| ^^^^^^^^^ the trait `std::convert::From<std::option::Option<((f64, f64), (f64, f64))>>` is not implemented for `std::option::Option<&[((f64, f64), (f64, f64))]>`
|
= help: the following implementations were found:
<std::option::Option<&'a T> as std::convert::From<&'a std::option::Option<T>>>
<std::option::Option<&'a mut T> as std::convert::From<&'a mut std::option::Option<T>>>
<std::option::Option<T> as std::convert::From<T>>
= note: required because of the requirements on the impl of `std::convert::Into<std::option::Option<&[((f64, f64), (f64, f64))]>>` for `std::option::Option<((f64, f64), (f64, f64))>`