Skip to content

Commit 229772f

Browse files
committed
Feature gate allocator-dependent features on "use_alloc" or "use_std"
Flags anything dependent on an allocator behind a feature gate, ensuring the library still compiles without default features (although it may not be very useful) Adds "use_alloc" to obtain things like Box, String, and Vec from liballoc.
1 parent 6871b20 commit 229772f

File tree

9 files changed

+40
-16
lines changed

9 files changed

+40
-16
lines changed

.travis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ matrix:
4040
- script: cargo build --no-default-features
4141
rust: nightly
4242

43+
# Ensure crate compiles with "use_alloc" instead of "use_std" (i.e. for no_std)
44+
- script: cargo build --no-default-features --features use_alloc
45+
rust: nightly
46+
4347
before_install: set -e
4448

4549
install:

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,5 @@ serde_test = "1.0"
3232

3333
[features]
3434
default = ["use_std"]
35+
use_alloc = []
3536
use_std = ["iovec"]

src/buf/buf.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
use super::{IntoBuf, Take, Reader, Iter, FromBuf, Chain};
1+
use super::{IntoBuf, Take, Reader, Iter, Chain};
2+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
3+
use super::FromBuf;
4+
25
use byteorder::ByteOrder;
36
#[cfg(feature = "use_std")]
47
use iovec::IoVec;
58

6-
#[cfg(not(feature = "use_std"))]
9+
#[cfg(feature = "use_alloc")]
710
use alloc::boxed::Box;
811
use core::{cmp, ptr};
912
#[cfg(not(feature = "use_std"))]
@@ -528,6 +531,7 @@ pub trait Buf {
528531
///
529532
/// assert_eq!(vec, &b"hello world"[..]);
530533
/// ```
534+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
531535
fn collect<B>(self) -> B
532536
where Self: Sized,
533537
B: FromBuf,
@@ -680,6 +684,7 @@ impl<'a, T: Buf + ?Sized> Buf for &'a mut T {
680684
}
681685
}
682686

687+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
683688
impl<T: Buf + ?Sized> Buf for Box<T> {
684689
fn remaining(&self) -> usize {
685690
(**self).remaining()

src/buf/buf_mut.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ use byteorder::ByteOrder;
33
#[cfg(feature = "use_std")]
44
use iovec::IoVec;
55

6-
#[cfg(not(feature = "use_std"))]
6+
#[cfg(feature = "use_alloc")]
77
use alloc::boxed::Box;
8-
#[cfg(not(feature = "use_std"))]
8+
#[cfg(feature = "use_alloc")]
99
use alloc::vec::Vec;
1010
use core::{cmp, ptr, usize};
1111
#[cfg(not(feature = "use_std"))]
@@ -665,6 +665,7 @@ impl<'a, T: BufMut + ?Sized> BufMut for &'a mut T {
665665
}
666666
}
667667

668+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
668669
impl<T: BufMut + ?Sized> BufMut for Box<T> {
669670
fn remaining_mut(&self) -> usize {
670671
(**self).remaining_mut()
@@ -712,6 +713,7 @@ impl<T: AsMut<[u8]> + AsRef<[u8]>> BufMut for Cursor<T> {
712713
}
713714
}
714715

716+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
715717
impl BufMut for Vec<u8> {
716718
#[inline]
717719
fn remaining_mut(&self) -> usize {

src/buf/from_buf.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use {Buf, BufMut, IntoBuf, Bytes, BytesMut};
22

3-
#[cfg(not(feature = "use_std"))]
3+
#[cfg(feature = "use_alloc")]
44
use alloc::vec::Vec;
55

66
/// Conversion from a [`Buf`]

src/buf/into_buf.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use super::{Buf};
22

3-
#[cfg(not(feature = "use_std"))]
4-
use buf::Cursor;
5-
#[cfg(not(feature = "use_std"))]
3+
#[cfg(feature = "use_alloc")]
64
use alloc::string::String;
7-
#[cfg(not(feature = "use_std"))]
5+
#[cfg(feature = "use_alloc")]
86
use alloc::vec::Vec;
7+
8+
#[cfg(not(feature = "use_std"))]
9+
use buf::Cursor;
910
#[cfg(feature = "use_std")]
1011
use std::io::Cursor;
1112

@@ -78,6 +79,7 @@ impl<'a> IntoBuf for &'a str {
7879
}
7980
}
8081

82+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
8183
impl IntoBuf for Vec<u8> {
8284
type Buf = Cursor<Vec<u8>>;
8385

@@ -86,6 +88,7 @@ impl IntoBuf for Vec<u8> {
8688
}
8789
}
8890

91+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
8992
impl<'a> IntoBuf for &'a Vec<u8> {
9093
type Buf = Cursor<&'a [u8]>;
9194

@@ -112,6 +115,7 @@ impl<'a> IntoBuf for &'a &'static str {
112115
}
113116
}
114117

118+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
115119
impl IntoBuf for String {
116120
type Buf = Cursor<Vec<u8>>;
117121

@@ -120,6 +124,7 @@ impl IntoBuf for String {
120124
}
121125
}
122126

127+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
123128
impl<'a> IntoBuf for &'a String {
124129
type Buf = Cursor<&'a [u8]>;
125130

src/buf/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
1919
mod buf;
2020
mod buf_mut;
21+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
2122
mod from_buf;
2223
mod chain;
2324
#[cfg(not(feature = "use_std"))]
@@ -30,6 +31,7 @@ mod writer;
3031

3132
pub use self::buf::Buf;
3233
pub use self::buf_mut::BufMut;
34+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
3335
pub use self::from_buf::FromBuf;
3436
pub use self::chain::Chain;
3537
#[cfg(not(feature = "use_std"))]

src/bytes.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ use core::borrow::Borrow;
77
use core::sync::atomic::{self, AtomicUsize, AtomicPtr};
88
use core::sync::atomic::Ordering::{Relaxed, Acquire, Release, AcqRel};
99

10-
#[cfg(not(feature = "use_std"))]
11-
use buf::Cursor;
12-
#[cfg(not(feature = "use_std"))]
10+
#[cfg(feature = "use_alloc")]
1311
use alloc::boxed::Box;
14-
#[cfg(not(feature = "use_std"))]
12+
#[cfg(feature = "use_alloc")]
1513
use alloc::string::String;
16-
#[cfg(not(feature = "use_std"))]
14+
#[cfg(feature = "use_alloc")]
1715
use alloc::vec::Vec;
16+
17+
#[cfg(not(feature = "use_std"))]
18+
use buf::Cursor;
1819
#[cfg(feature = "use_std")]
1920
use std::io::Cursor;
2021

src/lib.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@
7171
#![deny(warnings, missing_docs, missing_debug_implementations)]
7272
#![doc(html_root_url = "https://docs.rs/bytes/0.4")]
7373
#![cfg_attr(not(feature = "use_std"), no_std)]
74-
#![cfg_attr(not(feature = "use_std"), feature(alloc))]
74+
#![cfg_attr(feature = "use_alloc", feature(alloc))]
7575

7676
extern crate byteorder;
7777

78-
#[cfg(not(feature = "use_std"))]
78+
#[cfg(feature = "use_alloc")]
7979
extern crate alloc;
8080
#[cfg(feature = "use_std")]
8181
extern crate core;
@@ -96,8 +96,12 @@ pub use buf::{
9696
Take,
9797
};
9898

99+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
99100
mod bytes;
101+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
100102
mod debug;
103+
104+
#[cfg(any(feature = "use_alloc", feature = "use_std"))]
101105
pub use bytes::{Bytes, BytesMut};
102106

103107
pub use byteorder::{ByteOrder, BigEndian, LittleEndian};

0 commit comments

Comments
 (0)