我想使用GitHub上的 wiki ,也想在没有网络的情况下使用。
所以我专注于 gollum——一个基于 git 的 Wiki,但这在 Windows 上是不可能的。
但在README.mdGitHub上,他们说在Windows中需要JRuby(1.9.3+兼容),而gollum几乎是支持的。
我想索取有关如何在 Windows 上使用 gollum 的指南,但我没有找到更多信息。
我正在尝试构建nom解析器来检查 ID 为 UUID 的 URL
rooms/e19c94cf-53eb-4048-9c94-7ae74ff6d912
Run Code Online (Sandbox Code Playgroud)
我创建了以下内容:
extern crate uuid;
use uuid::Uuid;
named!(room_uuid<&str, Option<Uuid>>,
do_parse!(
tag_s!("rooms") >>
id: opt!(complete!(preceded!(
tag_s!("/"),
map_res!(take_s!(36), FromStr::from_str)
))) >>
(id)
)
);
Run Code Online (Sandbox Code Playgroud)
它几乎可以很好地处理所有情况:
assert_eq!(room_uuid("rooms"), Done("", None));
assert_eq!(room_uuid("rooms/"), Done("/", None));
assert_eq!(room_uuid("rooms/e19c94cf-53eb-4048-9c94-7ae74ff6d912"), Done("", Some(Uuid::parse_str("e19c94cf-53eb-4048-9c94-7ae74ff6d912").unwrap())));
Run Code Online (Sandbox Code Playgroud)
除了 ID 不是有效 UUID 的情况:
assert!(room_uuid("rooms/123").is_err()); # it fails
# room_uuid("rooms/123").to_result() => Ok(None)
Run Code Online (Sandbox Code Playgroud)
据我了解,这是因为opt!将内部转换Err为None.
我想将 ID 作为可选部分,但如果它存在,它应该是一个有效的 UUID。
不幸的是,我不明白如何将这两件事结合起来:可选性和严格格式。