{"action":"created","issue":{"url":"https://api.github.com/repos/libuv/libuv/issues/275","labels_url":"https://api.github.com/repos/libuv/libuv/issues/275/labels{/name}","comments_url":"https://api.github.com/repos/libuv/libuv/issues/275/comments","events_url":"https://api.github.com/repos/libuv/libuv/issues/275/events","html_url":"https://github.com/libuv/libuv/issues/275","id":62933142,"number":275,"title":"Custom uv_stream_t implementations","user":{"login":"jnicholls","id":20395,"avatar_url":"https://avatars.githubusercontent.com/u/20395?v=3","gravatar_id":"","url":"https://api.github.com/users/jnicholls","html_url":"https://github.com/jnicholls","followers_url":"https://api.github.com/users/jnicholls/followers","following_url":"https://api.github.com/users/jnicholls/following{/other_user}","gists_url":"https://api.github.com/users/jnicholls/gists{/gist_id}","starred_url":"https://api.github.com/users/jnicholls/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jnicholls/subscriptions","organizations_url":"https://api.github.com/users/jnicholls/orgs","repos_url":"https://api.github.com/users/jnicholls/repos","events_url":"https://api.github.com/users/jnicholls/events{/privacy}","received_events_url":"https://api.github.com/users/jnicholls/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":26,"created_at":"2015-03-19T09:49:03Z","updated_at":"2015-06-06T10:54:31Z","closed_at":null,"body":"libuv should add a stream interface to allow developers to add their own uv_stream_t types, in order to build pluggable steams directly on top of the friendly libuv interface.  This way, if someone wants to create a TLS stream for example, they can do so and consume that stream exactly the way they would consume a TCP stream for example.  This would greatly help the libuv ecosystem, solve the TLS gap, yet not fill that gap by relying directly on a particular TLS implementation.\r\n\r\nApologies if this is a dupe."},"comment":{"url":"https://api.github.com/repos/libuv/libuv/issues/comments/109564402","html_url":"https://github.com/libuv/libuv/issues/275#issuecomment-109564402","issue_url":"https://api.github.com/repos/libuv/libuv/issues/275","id":109564402,"user":{"login":"bnoordhuis","id":275871,"avatar_url":"https://avatars.githubusercontent.com/u/275871?v=3","gravatar_id":"","url":"https://api.github.com/users/bnoordhuis","html_url":"https://github.com/bnoordhuis","followers_url":"https://api.github.com/users/bnoordhuis/followers","following_url":"https://api.github.com/users/bnoordhuis/following{/other_user}","gists_url":"https://api.github.com/users/bnoordhuis/gists{/gist_id}","starred_url":"https://api.github.com/users/bnoordhuis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bnoordhuis/subscriptions","organizations_url":"https://api.github.com/users/bnoordhuis/orgs","repos_url":"https://api.github.com/users/bnoordhuis/repos","events_url":"https://api.github.com/users/bnoordhuis/events{/privacy}","received_events_url":"https://api.github.com/users/bnoordhuis/received_events","type":"User","site_admin":false},"created_at":"2015-06-06T10:54:31Z","updated_at":"2015-06-06T10:54:31Z","body":"I'm personally not really on board with taking libuv in that direction.  It probably means a lot of internal implementation details become _de facto_ public API.  It's a maintenance drag and increases the friction of future changes.\r\n\r\nAlso, composition > inheritance.  A TLS stream is a bad example IMO because TCP and TLS live at different levels in the stack."}}