{"action":"published","release":{"url":"https://api.github.com/repos/tminglei/form-binder/releases/1156616","assets_url":"https://api.github.com/repos/tminglei/form-binder/releases/1156616/assets","upload_url":"https://uploads.github.com/repos/tminglei/form-binder/releases/1156616/assets{?name}","html_url":"https://github.com/tminglei/form-binder/releases/tag/v0.9.0","id":1156616,"tag_name":"v0.9.0","target_commitish":"master","name":"v0.9.0","draft":false,"author":{"login":"tminglei","id":1828949,"avatar_url":"https://avatars.githubusercontent.com/u/1828949?v=3","gravatar_id":"","url":"https://api.github.com/users/tminglei","html_url":"https://github.com/tminglei","followers_url":"https://api.github.com/users/tminglei/followers","following_url":"https://api.github.com/users/tminglei/following{/other_user}","gists_url":"https://api.github.com/users/tminglei/gists{/gist_id}","starred_url":"https://api.github.com/users/tminglei/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tminglei/subscriptions","organizations_url":"https://api.github.com/users/tminglei/orgs","repos_url":"https://api.github.com/users/tminglei/repos","events_url":"https://api.github.com/users/tminglei/events{/privacy}","received_events_url":"https://api.github.com/users/tminglei/received_events","type":"User","site_admin":false},"prerelease":false,"created_at":"2015-04-12T23:27:02Z","published_at":"2015-04-12T23:27:32Z","assets":[],"tarball_url":"https://api.github.com/repos/tminglei/form-binder/tarball/v0.9.0","zipball_url":"https://api.github.com/repos/tminglei/form-binder/zipball/v0.9.0","body":"1) code refactoring and doc enhancement\r\n2) change `FormBinder.bind` **(!!!WARNING: broken change for normal developers)**,\r\n\r\nfrom\r\n```scala\r\n// bind mappings to data, consume it directly and return result, if validation passed;\r\n// return (processed) errors, if validation failed\r\ndef bind[T, R2, M <: InputMode](mapping: Mapping[T, M], data: Map[String, String])(consume: T => R2)\r\n```\r\nto\r\n```scala\r\n// bind mappings to data, and return an either, holding validation errors (left) or converted value (right);\r\n// let user to decide how to proceed\r\ndef bind[T, M <: InputMode](mapping: Mapping[T, M], data: Map[String, String]): Either[R, T]\r\n```"}}