         func getCharacteristicUuids() -> [CBUUID]? {
             return characteristics.isEmpty ? nil : characteristics.map() { $0.id.uuid }
         }
-    }
-
-    // TODO: Make the subscription CustomStringConvertible
-    public struct PeripheralSubscription : Encodable {
+
+        public var description : String {
+            var description = "<service: \(id)>"
+            characteristics.forEach { description += "\n\t\($0)" }
+            return description
+        }
+    }
+
+    public struct PeripheralSubscription : Encodable, CustomStringConvertible {
         public let name: String
         public let services: [ServiceSubscription] // If empty then all of the peripheral's services, characteristics and descriptors will be discovered
         public let autoConnect: Bool

        public func encode() -> Encodable.Properties {
            return ["name": name ?? "", "uuid": uuid.uuidString]
        }
    }

    public struct CharacteristicSubscription : Encodable {
        public let id: Identifier

        public init(id: Identifier) {

        func getServiceUuids() -> [CBUUID]? {
            return services.isEmpty ? nil : services.map() { $0.id.uuid }
        }

        public var description : String {
            var description = "<peripheral \(name) - autoConnect \(autoConnect), autodiscover \(autoDiscover)>"
            services.forEach { description += "\n\($0)" }
            return description
        }
    }
}

