Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
62b24c3d
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
62b24c3d
编写于
1月 29, 2015
作者:
M
Manish Goregaokar
浏览文件
操作
浏览文件
下载
差异文件
Rollup merge of 21662 - oli-obk:hashmap_enum_json, r=alexcrichton
上级
518ce538
82b0b0fc
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
29 addition
and
13 deletion
+29
-13
src/libserialize/json.rs
src/libserialize/json.rs
+25
-9
src/libsyntax/parse/mod.rs
src/libsyntax/parse/mod.rs
+1
-1
src/test/run-pass/deriving-encodable-decodable-box.rs
src/test/run-pass/deriving-encodable-decodable-box.rs
+1
-1
src/test/run-pass/deriving-encodable-decodable-cell-refcell.rs
...est/run-pass/deriving-encodable-decodable-cell-refcell.rs
+1
-1
src/test/run-pass/issue-14021.rs
src/test/run-pass/issue-14021.rs
+1
-1
未找到文件。
src/libserialize/json.rs
浏览文件 @
62b24c3d
...
...
@@ -97,7 +97,7 @@
//! };
//!
//! // Serialize using `json::encode`
//! let encoded = json::encode(&object);
//! let encoded = json::encode(&object)
.unwrap()
;
//!
//! // Deserialize using `json::decode`
//! let decoded: TestStruct = json::decode(encoded.as_slice()).unwrap();
...
...
@@ -143,7 +143,7 @@
//! uid: 1,
//! dsc: "test".to_string(),
//! val: num.to_json(),
//! });
//! })
.unwrap()
;
//! println!("data: {}", data);
//! // data: {"uid":1,"dsc":"test","val":"0.0001+12.539j"};
//! }
...
...
@@ -316,13 +316,13 @@ pub fn decode<T: ::Decodable>(s: &str) -> DecodeResult<T> {
}
/// Shortcut function to encode a `T` into a JSON `String`
pub
fn
encode
<
T
:
::
Encodable
>
(
object
:
&
T
)
->
string
::
String
{
pub
fn
encode
<
T
:
::
Encodable
>
(
object
:
&
T
)
->
Result
<
string
::
String
,
EncoderError
>
{
let
mut
s
=
String
::
new
();
{
let
mut
encoder
=
Encoder
::
new
(
&
mut
s
);
let
_
=
object
.encode
(
&
mut
encoder
);
try!
(
object
.encode
(
&
mut
encoder
)
);
}
s
Ok
(
s
)
}
impl
fmt
::
Display
for
ErrorCode
{
...
...
@@ -536,7 +536,6 @@ fn emit_str(&mut self, v: &str) -> EncodeResult {
fn
emit_enum
<
F
>
(
&
mut
self
,
_
name
:
&
str
,
f
:
F
)
->
EncodeResult
where
F
:
FnOnce
(
&
mut
Encoder
<
'a
>
)
->
EncodeResult
,
{
if
self
.is_emitting_map_key
{
return
Err
(
EncoderError
::
BadHashmapKey
);
}
f
(
self
)
}
...
...
@@ -550,10 +549,10 @@ fn emit_enum_variant<F>(&mut self,
// enums are encoded as strings or objects
// Bunny => "Bunny"
// Kangaroo(34,"William") => {"variant": "Kangaroo", "fields": [34,"William"]}
if
self
.is_emitting_map_key
{
return
Err
(
EncoderError
::
BadHashmapKey
);
}
if
cnt
==
0
{
escape_str
(
self
.writer
,
name
)
}
else
{
if
self
.is_emitting_map_key
{
return
Err
(
EncoderError
::
BadHashmapKey
);
}
try!
(
write!
(
self
.writer
,
"{{
\"
variant
\"
:"
));
try!
(
escape_str
(
self
.writer
,
name
));
try!
(
write!
(
self
.writer
,
",
\"
fields
\"
:["
));
...
...
@@ -785,7 +784,6 @@ fn emit_str(&mut self, v: &str) -> EncodeResult {
fn
emit_enum
<
F
>
(
&
mut
self
,
_
name
:
&
str
,
f
:
F
)
->
EncodeResult
where
F
:
FnOnce
(
&
mut
PrettyEncoder
<
'a
>
)
->
EncodeResult
,
{
if
self
.is_emitting_map_key
{
return
Err
(
EncoderError
::
BadHashmapKey
);
}
f
(
self
)
}
...
...
@@ -797,10 +795,10 @@ fn emit_enum_variant<F>(&mut self,
->
EncodeResult
where
F
:
FnOnce
(
&
mut
PrettyEncoder
<
'a
>
)
->
EncodeResult
,
{
if
self
.is_emitting_map_key
{
return
Err
(
EncoderError
::
BadHashmapKey
);
}
if
cnt
==
0
{
escape_str
(
self
.writer
,
name
)
}
else
{
if
self
.is_emitting_map_key
{
return
Err
(
EncoderError
::
BadHashmapKey
);
}
try!
(
write!
(
self
.writer
,
"{{
\n
"
));
self
.curr_indent
+=
self
.indent
;
try!
(
spaces
(
self
.writer
,
self
.curr_indent
));
...
...
@@ -3537,6 +3535,24 @@ fn indents(source: &str) -> uint {
}
}
#[test]
fn
test_hashmap_with_enum_key
()
{
use
std
::
collections
::
HashMap
;
use
json
;
#[derive(RustcEncodable,
Eq,
Hash,
PartialEq,
RustcDecodable,
Show)]
enum
Enum
{
Foo
,
#[allow(dead_code)]
Bar
,
}
let
mut
map
=
HashMap
::
new
();
map
.insert
(
Enum
::
Foo
,
0
);
let
result
=
json
::
encode
(
&
map
)
.unwrap
();
assert_eq!
(
&
result
[],
r#"{"Foo":0}"#
);
let
decoded
:
HashMap
<
Enum
,
_
>
=
json
::
decode
(
result
.as_slice
())
.unwrap
();
assert_eq!
(
map
,
decoded
);
}
#[test]
fn
test_hashmap_with_numeric_key_can_handle_double_quote_delimited_key
()
{
use
std
::
collections
::
HashMap
;
...
...
src/libsyntax/parse/mod.rs
浏览文件 @
62b24c3d
...
...
@@ -854,7 +854,7 @@ fn string_to_tts_macro () {
#[test]
fn
string_to_tts_1
()
{
let
tts
=
string_to_tts
(
"fn a (b : i32) { b; }"
.to_string
());
assert_eq!
(
json
::
encode
(
&
tts
),
assert_eq!
(
json
::
encode
(
&
tts
)
.unwrap
()
,
"[
\
{
\
\"
variant
\"
:
\"
TtToken
\"
,
\
...
...
src/test/run-pass/deriving-encodable-decodable-box.rs
浏览文件 @
62b24c3d
...
...
@@ -24,7 +24,7 @@ struct A {
fn
main
()
{
let
obj
=
A
{
foo
:
box
[
true
,
false
]
};
let
s
=
json
::
encode
(
&
obj
);
let
s
=
json
::
encode
(
&
obj
)
.unwrap
()
;
let
obj2
:
A
=
json
::
decode
(
s
.as_slice
())
.unwrap
();
assert
!
(
obj
.foo
==
obj2
.foo
);
}
src/test/run-pass/deriving-encodable-decodable-cell-refcell.rs
浏览文件 @
62b24c3d
...
...
@@ -35,7 +35,7 @@ fn main() {
foo
:
Cell
::
new
(
true
),
bar
:
RefCell
::
new
(
A
{
baz
:
2
}
)
};
let
s
=
json
::
encode
(
&
obj
);
let
s
=
json
::
encode
(
&
obj
)
.unwrap
()
;
let
obj2
:
B
=
json
::
decode
(
s
.as_slice
())
.unwrap
();
assert
!
(
obj
.foo
.get
()
==
obj2
.foo
.get
());
assert
!
(
obj
.bar
.borrow
()
.baz
==
obj2
.bar
.borrow
()
.baz
);
...
...
src/test/run-pass/issue-14021.rs
浏览文件 @
62b24c3d
...
...
@@ -20,7 +20,7 @@
pub
fn
main
()
{
let
obj
=
UnitLikeStruct
;
let
json_str
:
String
=
json
::
encode
(
&
obj
);
let
json_str
:
String
=
json
::
encode
(
&
obj
)
.unwrap
()
;
let
json_object
=
json
::
from_str
(
json_str
.as_slice
());
let
mut
decoder
=
json
::
Decoder
::
new
(
json_object
.unwrap
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录