From 11f08395072e420bf43fddc5ffc9ce41d1cb1107 Mon Sep 17 00:00:00 2001 From: Rohan Prinja Date: Fri, 28 Oct 2016 21:24:05 -0400 Subject: [PATCH] change return type of Comment::get_tag_attr_{name,value} to Option --- src/clang.rs | 24 ++++++++++++++++++------ src/ir/annotations.rs | 17 +++++++++-------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/clang.rs b/src/clang.rs index c0934055cc..63bd5b91ba 100755 --- a/src/clang.rs +++ b/src/clang.rs @@ -817,17 +817,29 @@ impl Comment { /// Given that this comment is an HTML start tag, get the `idx`th /// attribute's name. - pub fn get_tag_attr_name(&self, idx: c_uint) -> String { - unsafe { - String_ { x: clang_HTMLStartTag_getAttrName(self.x, idx) }.to_string() + pub fn get_tag_attr_name(&self, idx: c_uint) -> Option { + if idx >= self.get_num_tag_attrs() { + None + } else { + unsafe { + Some(String_ { + x: clang_HTMLStartTag_getAttrName(self.x, idx) + }.to_string()) + } } } /// Given that this comment is an HTML start tag, get the `idx`th /// attribute's value. - pub fn get_tag_attr_value(&self, idx: c_uint) -> String { - unsafe { - String_ { x: clang_HTMLStartTag_getAttrValue(self.x, idx) }.to_string() + pub fn get_tag_attr_value(&self, idx: c_uint) -> Option { + if idx >= self.get_num_tag_attrs() { + None + } else { + unsafe { + Some(String_ { + x: clang_HTMLStartTag_getAttrValue(self.x, idx) + }.to_string()) + } } } } diff --git a/src/ir/annotations.rs b/src/ir/annotations.rs index f0d9715e5e..c5adcd8710 100644 --- a/src/ir/annotations.rs +++ b/src/ir/annotations.rs @@ -134,19 +134,20 @@ impl Annotations { if comment.kind() == CXComment_HTMLStartTag && comment.get_tag_name() == "div" && comment.get_num_tag_attrs() > 1 && - comment.get_tag_attr_name(0) == "rustbindgen" { + comment.get_tag_attr_name(0).as_ref().map(|s| s.as_str()) + == Some("rustbindgen") { *matched = true; for i in 0..comment.get_num_tag_attrs() { - let value = comment.get_tag_attr_value(i); - let name = comment.get_tag_attr_name(i); - match name.as_str() { + let value_opt = comment.get_tag_attr_value(i); + match comment.get_tag_attr_name(i).unwrap().as_str() { "opaque" => self.opaque = true, "hide" => self.hide = true, "nocopy" => self.disallow_copy = true, - "replaces" => self.use_instead_of = Some(value), - "private" => self.private_fields = Some(value != "false"), - "accessor" - => self.accessor_kind = Some(parse_accessor(&value)), + "replaces" => self.use_instead_of = value_opt, + "private" => self.private_fields = value_opt.map(|v| + v != "false"), + "accessor" => self.accessor_kind = value_opt.map(|v| + parse_accessor(&v)), _ => {}, } }