use tokenizer::{PeekableTokens, Token};
use types::FromTokens;
use types::linestring::LineString;
use WktItem;
pub struct Polygon {
pub lines: Vec<LineString>
}
impl Polygon {
pub fn as_item(self) -> WktItem {
WktItem::Polygon(self)
}
}
impl FromTokens for Polygon {
fn from_tokens(tokens: &mut PeekableTokens) -> Result<Self, &'static str> {
let mut lines = Vec::new();
let x: Result<LineString, _> = FromTokens::from_tokens_with_parens(tokens);
lines.push(match x {
Ok(l) => l,
Err(s) => return Err(s),
});
while let Some(&Token::Comma) = tokens.peek() {
tokens.next();
let x: Result<LineString, _> = FromTokens::from_tokens_with_parens(tokens);
lines.push(match x {
Ok(c) => c,
Err(s) => return Err(s),
});
}
Ok(Polygon { lines: lines })
}
}