{"id":25949742,"url":"https://github.com/javiorfo/nilo","last_synced_at":"2026-01-16T13:47:36.983Z","repository":{"id":280294615,"uuid":"941523714","full_name":"javiorfo/nilo","owner":"javiorfo","description":"Rusty Go Option library for handling nil values, some errors and marshaling","archived":false,"fork":false,"pushed_at":"2026-01-14T22:45:48.000Z","size":26,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-15T04:56:01.508Z","etag":null,"topics":["go","go-library","golang","option","rust-option"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/javiorfo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-02T13:56:37.000Z","updated_at":"2026-01-14T22:45:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"09107955-31c9-4a06-9c94-c083ea3d4ebc","html_url":"https://github.com/javiorfo/nilo","commit_stats":null,"previous_names":["javiorfo/gopto"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/javiorfo/nilo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fnilo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fnilo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fnilo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fnilo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/javiorfo","download_url":"https://codeload.github.com/javiorfo/nilo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javiorfo%2Fnilo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479034,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","go-library","golang","option","rust-option"],"created_at":"2025-03-04T12:28:54.747Z","updated_at":"2026-01-16T13:47:36.975Z","avatar_url":"https://github.com/javiorfo.png","language":"Go","funding_links":["https://www.paypal.com/donate/?hosted_button_id=FA7SGLSCT2H8G"],"categories":[],"sub_categories":[],"readme":"# nilo\n*Rusty Go Option library for handling nil values, some errors and marshaling*\n\n## Caveats\n- This library requires Go 1.23+\n\n## Intallation\n```bash\ngo get -u github.com/javiorfo/nilo@latest\n```\n\n## Example\n#### Examples [here](https://github.com/javiorfo/nilo/tree/master/examples)\n```go\npackage main\n\nimport (\n  \"errors\"\n  \"fmt\"\n\n  \"github.com/javiorfo/nilo\"\n)\n\ntype User struct {\n  Name string\n}\n\n// Implements nilo.Default interface\nfunc (u User) Default() User {\n  return User{\"Default Implementation\"}\n}\n\nfunc main() {\n  var optUser = nilo.None[User]()\n\n  fmt.Printf(\"User or default: %+v\\n\", optUser.UnwrapOrDefault())\n  fmt.Printf(\"User or: %+v\\n\", optUser.UnwrapOr(*new(User)))\n  fmt.Printf(\"User or else: %+v\\n\", optUser.UnwrapOrElse(func() User { return User{\"else\"} }))\n  fmt.Printf(\"Map or: %+v\\n\", optUser.MapOr(User{\"or\"}, func(u User) User {\n\t  u.Name = \"something\"\n\t  return u\n  }))\n\n  nilo.FromResult(getUser(true)).\n    OkAndResult(getUser2).\n    Consume(print)\n\n  _, err := test(false).OkOrElse(func() error { return errors.New(\"some err\") })\n  fmt.Println(\"Error:\", err.Error())\n\n  fmt.Println(test(true).\n    MapToString(func(v string) string { return v + \", World\" }).\n    UnwrapOr(\"another string\"))\n}\n\nfunc test(b bool) nilo.Option[string] {\n  if b {\n\t  return nilo.Some(\"Hello\")\n  }\n  return nilo.None[string]()\n}\n\nfunc print[T any](v *T) {\n  fmt.Printf(\"Value: %#v\\n\", *v)\n}\n\nfunc getUser(b bool) (*int, error) {\n  if b {\n\t  i := 1\n\t  return \u0026i, nil\n  }\n  return nil, errors.New(\"error\")\n}\n\nfunc getUser2(v *int) (*int, error) {\n  if *v == 0 {\n\t  return nil, errors.New(\"error\")\n  }\n  i := *v + 2\n  return \u0026i, nil\n}\n```\n\n#### JSON marshal\n```go\npackage main\n\nimport (\n  \"encoding/json\"\n  \"fmt\"\n\n  \"github.com/javiorfo/nilo\"\n)\n\ntype User struct {\n  Name string              `json:\"name\"`\n  Code nilo.Option[string] `json:\"code\"`\n}\n\nfunc main() {\n  var unmarshalUser User\n  user := User{\n\t  Name: \"Name\",\n\t  Code: nilo.None[string](),\n  }\n\n  // Marshal\n  jsonData, err := json.MarshalIndent(user, \"\", \"  \")\n  if err != nil {\n\t  fmt.Println(\"Error marshaling to JSON:\", err)\n\t  return\n  }\n\n  fmt.Println(string(jsonData))\n\t\n  // Unmarshal\n  err = json.Unmarshal(jsonData, \u0026unmarshalUser)\n  if err != nil {\n\t  fmt.Println(\"Error unmarshaling:\", err)\n\t  return\n  }\n\t\n  fmt.Printf(\"Unmarshaled User: %+v\\n\", unmarshalUser)\n  if unmarshalUser.Code.IsNone() {\n\t  fmt.Printf(\"Code is None: %s\\n\", unmarshalUser.Code)\n  }\n\n  // Put Some in Code\n  user.Code.Replace(\"some code\")\n\n  // Marshal\n  jsonData, err = json.MarshalIndent(user, \"\", \"  \")\n  if err != nil {\n\t  fmt.Println(\"Error marshaling to JSON:\", err)\n\t  return\n  }\n\n  fmt.Println(string(jsonData))\n\n  // Unmarshal\n  err = json.Unmarshal(jsonData, \u0026unmarshalUser)\n  if err != nil {\n\t  fmt.Println(\"Error unmarshaling:\", err)\n\t  return\n  }\n\t\n  fmt.Printf(\"Unmarshaled User: %+v\\n\", unmarshalUser)\n  if unmarshalUser.Code.IsSome() {\n\t  fmt.Printf(\"Code is Some with value: %s\\n\", unmarshalUser.Code.Unwrap())\n  }\n}\n```\n\n#### All methods\n```go\nfunc (o Option[T]) Unwrap() T\nfunc (o Option[T]) UnwrapOr(other T) T\nfunc (o Option[T]) UnwrapUnchecked() *T\nfunc (o Option[T]) UnwrapOrDefault() T\nfunc (o Option[T]) UnwrapOrElse(supplier func() T) T\nfunc (o Option[T]) OkOr(err error) (*T, error)\nfunc (o Option[T]) OkOrElse(err func() error) (*T, error)\nfunc (o Option[T]) OrElse(supplier func() Option[T]) Option[T]\nfunc (o Option[T]) Filter(filter func(T) bool) Option[T]\nfunc (o Option[T]) IsNone() bool\nfunc (o Option[T]) IsSome() bool\nfunc (o Option[T]) Inspect(consumer func(T)) Option[T]\nfunc (o Option[T]) InspectOrElse(consumer func(T), or func())\nfunc (o Option[T]) Consume(consumer func(T))\nfunc None[T any]() Option[T]\nfunc Some[T any](value T) Option[T]\nfunc SomePtr[T any](value *T) Option[T]\nfunc (o Option[T]) AndThen(fn func(T) Option[T]) Option[T]\nfunc (o Option[T]) And(other Option[T]) Option[T]\nfunc (o Option[T]) Or(other Option[T]) Option[T]\nfunc (o Option[T]) Xor(other Option[T]) Option[T]\nfunc (o Option[T]) IsSomeAnd(predicate func(T) bool) bool\nfunc (o Option[T]) IsNoneOr(predicate func(T) bool) bool\nfunc (o Option[T]) Expect(msg string) T\nfunc (o *Option[T]) Take() Option[T]\nfunc (o *Option[T]) TakeIf(predicate func(T) bool) Option[T]\nfunc (o *Option[T]) Replace(value T) Option[T]\nfunc (o *Option[T]) Insert(value T)\nfunc (o *Option[T]) GetOrInsert(value T) T\nfunc (o *Option[T]) GetOrInsertWith(supplier func() T)\nfunc (o *Option[T]) GetOrInsertDefault() T\nfunc (o Option[T]) Map(mapper func(T) T) Option[T]\nfunc (o Option[T]) MapToAny(mapper func(T) any) Option[any]\nfunc (o Option[T]) MapToString(mapper func(T) string) Option[string]\nfunc (o Option[T]) MapToInt(mapper func(T) int) Option[int]\nfunc (o Option[T]) MapToBool(mapper func(T) bool) Option[bool]\nfunc (o Option[T]) MapOr(def T, mapper func(T) T) T\nfunc (o Option[T]) MapOrAny(def any, mapper func(T) any) any\nfunc (o Option[T]) MapOrString(def string, mapper func(T) string) string\nfunc (o Option[T]) MapOrInt(def int, mapper func(T) int) int\nfunc (o Option[T]) MapOrBool(def bool, mapper func(T) bool) bool\nfunc (o Option[T]) MapOrElse(supplier func() T, mapper func(T) T) T\nfunc (o Option[T]) MapOrElseAny(supplier func() any, mapper func(T) any) any\nfunc (o Option[T]) MapOrElseString(supplier func() string, mapper func(T) string) string\nfunc (o Option[T]) MapOrElseInt(supplier func() int, mapper func(T) int) int\nfunc (o Option[T]) MapOrElseBool(supplier func() bool, mapper func(T) bool) bool\nfunc (o Option[T]) MapOrDefault(mapper func(T) T) T\nfunc (o Option[T]) OkAndResult(apply func(T) (T, error)) Option[T]\nfunc FromResult[T any](value T, err error) Option[T]\nfunc (o Option[T]) MarshalJSON() ([]byte, error)\nfunc (o *Option[T]) UnmarshalJSON(data []byte) error\nfunc (o Option[T]) String() string\n```\n\n---\n\n### Donate\n- **Bitcoin** [(QR)](https://raw.githubusercontent.com/javiorfo/img/master/crypto/bitcoin.png)  `1GqdJ63RDPE4eJKujHi166FAyigvHu5R7v`\n- [Paypal](https://www.paypal.com/donate/?hosted_button_id=FA7SGLSCT2H8G)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaviorfo%2Fnilo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaviorfo%2Fnilo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaviorfo%2Fnilo/lists"}