From ed9502842dd050480148b34a9b60cf5f67787905 Mon Sep 17 00:00:00 2001
From: Diego Barrios Romero <eldruin@gmail.com>
Date: Thu, 16 May 2019 19:24:25 +0200
Subject: [PATCH] Seal public types

---
 src/interface.rs |  6 +++---
 src/lib.rs       | 12 ++++++++++++
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/interface.rs b/src/interface.rs
index 8b2260a..74f2352 100644
--- a/src/interface.rs
+++ b/src/interface.rs
@@ -1,6 +1,6 @@
 //! I2C/SPI interfaces
 
-use super::{Error, DEVICE_ADDRESS};
+use super::{private, Error, DEVICE_ADDRESS};
 use hal::blocking;
 
 /// I2C interface
@@ -17,7 +17,7 @@ pub struct SpiInterface<SPI, CS> {
 }
 
 /// Write data
-pub trait WriteData {
+pub trait WriteData: private::Sealed {
     /// Error type
     type Error;
     /// Write to an u8 register
@@ -72,7 +72,7 @@ where
 }
 
 /// Read data
-pub trait ReadData {
+pub trait ReadData: private::Sealed {
     /// Error type
     type Error;
     /// Read an u8 register
diff --git a/src/lib.rs b/src/lib.rs
index d6d6535..a94fac8 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -567,3 +567,15 @@ pub use ds323x::{
 mod ds3231;
 mod ds3232;
 mod ds3234;
+
+mod private {
+    use super::{ic, interface};
+    pub trait Sealed {}
+
+    impl<SPI, CS> Sealed for interface::SpiInterface<SPI, CS> {}
+    impl<I2C> Sealed for interface::I2cInterface<I2C> {}
+
+    impl Sealed for ic::DS3231 {}
+    impl Sealed for ic::DS3232 {}
+    impl Sealed for ic::DS3234 {}
+}