Skip to content

Commit 1cc986e

Browse files
authored
Merge pull request #9 from rust-bitcoin/release-1.0.0
Release 1.0.0
2 parents 1786f61 + 5726fb4 commit 1cc986e

File tree

9 files changed

+217
-147
lines changed

9 files changed

+217
-147
lines changed

.rustfmt.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
hard_tabs = true
2+
use_small_heuristics = "Off"

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CHANGELOG
2+
=========
3+
4+
5+
# v1.0.0
6+
7+
- Initial version of entire rewrite.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bip39"
3-
version = "1.0.0-rc1"
3+
version = "1.0.0"
44
authors = ["Steven Roose <steven@stevenroose.org>"]
55
license = "CC0-1.0"
66
homepage = "https://github.com/rust-bitcoin/rust-bip39/"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ Use the `all-languages` feature to enable all languages.
2828

2929
## MSRV
3030

31-
This crate supports Rust v1.29 and up.
31+
This crate supports Rust v1.29 and up and works with `no_std`.
3232

benches/bench.rs

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@ use test::Bencher;
88
use bip39::*;
99

1010
#[cfg(not(any(
11-
feature = "chinese-simplified", feature = "chinese-traditional", feature = "czech",
12-
feature = "french", feature = "italian", feature = "japanese", feature = "korean",
11+
feature = "chinese-simplified",
12+
feature = "chinese-traditional",
13+
feature = "czech",
14+
feature = "french",
15+
feature = "italian",
16+
feature = "japanese",
17+
feature = "korean",
1318
feature = "spanish"
1419
)))]
1520
const LANG: Language = Language::English;
@@ -32,38 +37,38 @@ const LANG: Language = Language::Spanish;
3237

3338
#[bench]
3439
fn validate(b: &mut Bencher) {
35-
let entropy = "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f".as_bytes();
36-
let mnemonic = Mnemonic::from_entropy_in(LANG, &entropy).unwrap();
40+
let entropy = "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f".as_bytes();
41+
let mnemonic = Mnemonic::from_entropy_in(LANG, &entropy).unwrap();
3742
assert_eq!(mnemonic.word_count(), 24);
3843
let phrase = mnemonic.to_string();
3944

40-
b.iter(|| {
41-
let _ = Mnemonic::parse_in(Language::English, &phrase);
42-
});
45+
b.iter(|| {
46+
let _ = Mnemonic::parse_in(Language::English, &phrase);
47+
});
4348
}
4449

4550
#[bench]
4651
fn from_entropy(b: &mut Bencher) {
47-
let entropy = "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f".as_bytes();
52+
let entropy = "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f".as_bytes();
4853

49-
b.iter(|| {
50-
let _ = Mnemonic::from_entropy_in(LANG, &entropy).unwrap();
51-
});
54+
b.iter(|| {
55+
let _ = Mnemonic::from_entropy_in(LANG, &entropy).unwrap();
56+
});
5257
}
5358

5459
#[bench]
5560
fn new_mnemonic(b: &mut Bencher) {
56-
b.iter(|| {
57-
let _ = Mnemonic::generate_in(LANG, 24);
58-
});
61+
b.iter(|| {
62+
let _ = Mnemonic::generate_in(LANG, 24);
63+
});
5964
}
6065

6166
#[bench]
6267
fn to_seed(b: &mut Bencher) {
63-
let entropy = "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f".as_bytes();
64-
let m = Mnemonic::from_entropy_in(LANG, &entropy).unwrap();
68+
let entropy = "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f".as_bytes();
69+
let m = Mnemonic::from_entropy_in(LANG, &entropy).unwrap();
6570

66-
b.iter(|| {
67-
let _ = m.to_seed("");
68-
});
71+
b.iter(|| {
72+
let _ = m.to_seed("");
73+
});
6974
}

src/internal_macros.rs

Lines changed: 54 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,58 @@
1-
21
/// Implement serde serialization based on the
32
/// fmt::Display and std::FromStr traits.
43
macro_rules! serde_string_impl {
5-
($name:ident, $expecting:expr) => {
6-
#[cfg(feature = "serde")]
7-
impl<'de> $crate::serde::Deserialize<'de> for $name {
8-
fn deserialize<D>(deserializer: D) -> Result<$name, D::Error>
9-
where
10-
D: $crate::serde::de::Deserializer<'de>,
11-
{
12-
use ::std::fmt::{self, Formatter};
13-
use ::std::str::FromStr;
14-
15-
struct Visitor;
16-
impl<'de> $crate::serde::de::Visitor<'de> for Visitor {
17-
type Value = $name;
18-
19-
fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
20-
formatter.write_str($expecting)
21-
}
22-
23-
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
24-
where
25-
E: $crate::serde::de::Error,
26-
{
27-
$name::from_str(v).map_err(E::custom)
28-
}
29-
30-
fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
31-
where
32-
E: $crate::serde::de::Error,
33-
{
34-
self.visit_str(v)
35-
}
36-
37-
fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
38-
where
39-
E: $crate::serde::de::Error,
40-
{
41-
self.visit_str(&v)
42-
}
43-
}
44-
45-
deserializer.deserialize_str(Visitor)
46-
}
47-
}
48-
49-
#[cfg(feature = "serde")]
50-
impl<'de> $crate::serde::Serialize for $name {
51-
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
52-
where
53-
S: $crate::serde::Serializer,
54-
{
55-
serializer.collect_str(&self)
56-
}
57-
}
58-
};
4+
($name:ident, $expecting:expr) => {
5+
#[cfg(feature = "serde")]
6+
impl<'de> $crate::serde::Deserialize<'de> for $name {
7+
fn deserialize<D>(deserializer: D) -> Result<$name, D::Error>
8+
where
9+
D: $crate::serde::de::Deserializer<'de>,
10+
{
11+
use std::fmt::{self, Formatter};
12+
use std::str::FromStr;
13+
14+
struct Visitor;
15+
impl<'de> $crate::serde::de::Visitor<'de> for Visitor {
16+
type Value = $name;
17+
18+
fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
19+
formatter.write_str($expecting)
20+
}
21+
22+
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
23+
where
24+
E: $crate::serde::de::Error,
25+
{
26+
$name::from_str(v).map_err(E::custom)
27+
}
28+
29+
fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
30+
where
31+
E: $crate::serde::de::Error,
32+
{
33+
self.visit_str(v)
34+
}
35+
36+
fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
37+
where
38+
E: $crate::serde::de::Error,
39+
{
40+
self.visit_str(&v)
41+
}
42+
}
43+
44+
deserializer.deserialize_str(Visitor)
45+
}
46+
}
47+
48+
#[cfg(feature = "serde")]
49+
impl<'de> $crate::serde::Serialize for $name {
50+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
51+
where
52+
S: $crate::serde::Serializer,
53+
{
54+
serializer.collect_str(&self)
55+
}
56+
}
57+
};
5958
}

src/language/mod.rs

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
21
use core::fmt;
32

4-
mod english;
53
#[cfg(feature = "chinese-simplified")]
64
mod chinese_simplified;
75
#[cfg(feature = "chinese-traditional")]
86
mod chinese_traditional;
97
#[cfg(feature = "czech")]
108
mod czech;
9+
mod english;
1110
#[cfg(feature = "french")]
1211
mod french;
1312
#[cfg(feature = "italian")]
@@ -142,7 +141,7 @@ impl Language {
142141
None => return &[],
143142
};
144143
let count = self.word_list()[first..].iter().take_while(|w| w.starts_with(prefix)).count();
145-
&self.word_list()[first .. first + count]
144+
&self.word_list()[first..first + count]
146145
}
147146

148147
/// Get the index of the word in the word list.
@@ -163,8 +162,13 @@ mod tests {
163162
use super::*;
164163

165164
#[cfg(all(
166-
feature = "chinese-simplified", feature = "chinese-traditional", feature = "czech",
167-
feature = "french", feature = "italian", feature = "japanese", feature = "korean",
165+
feature = "chinese-simplified",
166+
feature = "chinese-traditional",
167+
feature = "czech",
168+
feature = "french",
169+
feature = "italian",
170+
feature = "japanese",
171+
feature = "korean",
168172
feature = "spanish"
169173
))]
170174
#[test]
@@ -185,13 +189,22 @@ mod tests {
185189
use bitcoin_hashes::{sha256, Hash, HashEngine};
186190

187191
let checksums = [
188-
("5c5942792bd8340cb8b27cd592f1015edf56a8c5b26276ee18a482428e7c5726", Language::SimplifiedChinese),
189-
("417b26b3d8500a4ae3d59717d7011952db6fc2fb84b807f3f94ac734e89c1b5f", Language::TraditionalChinese),
192+
(
193+
"5c5942792bd8340cb8b27cd592f1015edf56a8c5b26276ee18a482428e7c5726",
194+
Language::SimplifiedChinese,
195+
),
196+
(
197+
"417b26b3d8500a4ae3d59717d7011952db6fc2fb84b807f3f94ac734e89c1b5f",
198+
Language::TraditionalChinese,
199+
),
190200
("7e80e161c3e93d9554c2efb78d4e3cebf8fc727e9c52e03b83b94406bdcc95fc", Language::Czech),
191201
("2f5eed53a4727b4bf8880d8f3f199efc90e58503646d9ff8eff3a2ed3b24dbda", Language::English),
192202
("ebc3959ab7801a1df6bac4fa7d970652f1df76b683cd2f4003c941c63d517e59", Language::French),
193203
("d392c49fdb700a24cd1fceb237c1f65dcc128f6b34a8aacb58b59384b5c648c2", Language::Italian),
194-
("2eed0aef492291e061633d7ad8117f1a2b03eb80a29d0e4e3117ac2528d05ffd", Language::Japanese),
204+
(
205+
"2eed0aef492291e061633d7ad8117f1a2b03eb80a29d0e4e3117ac2528d05ffd",
206+
Language::Japanese,
207+
),
195208
("9e95f86c167de88f450f0aaf89e87f6624a57f973c67b516e338e8e8b8897f60", Language::Korean),
196209
("46846a5a0139d1e3cb77293e521c2865f7bcdb82c44e8d0a06a2cd0ecba48c0b", Language::Spanish),
197210
];
@@ -206,8 +219,11 @@ mod tests {
206219
digest.input("\n".as_bytes());
207220
}
208221
#[cfg(feature = "std")]
209-
assert_eq!(sha256::Hash::from_engine(digest).to_string(), _sum,
210-
"word list for language {} failed checksum check", lang,
222+
assert_eq!(
223+
sha256::Hash::from_engine(digest).to_string(),
224+
_sum,
225+
"word list for language {} failed checksum check",
226+
lang,
211227
);
212228
}
213229
}
@@ -217,7 +233,7 @@ mod tests {
217233
let lang = Language::English;
218234

219235
let res = lang.words_by_prefix("woo");
220-
assert_eq!(res, ["wood","wool"]);
236+
assert_eq!(res, ["wood", "wool"]);
221237

222238
let res = lang.words_by_prefix("");
223239
assert_eq!(res.len(), 2048);
@@ -227,8 +243,13 @@ mod tests {
227243
}
228244

229245
#[cfg(all(
230-
feature = "chinese-simplified", feature = "chinese-traditional", feature = "czech",
231-
feature = "french", feature = "italian", feature = "japanese", feature = "korean",
246+
feature = "chinese-simplified",
247+
feature = "chinese-traditional",
248+
feature = "czech",
249+
feature = "french",
250+
feature = "italian",
251+
feature = "japanese",
252+
feature = "korean",
232253
feature = "spanish"
233254
))]
234255
#[test]

0 commit comments

Comments
 (0)