ursus
06/13/2023, 9:34 PMfoo
folder with api
and impl
modules?
Or foo-api
and foo-impl
in root?
Or foo
for api and foo-impl
Or somehow nest the impl module inside api module?
Also, what's your naming scheme for the interfacy module, api? contract? something else?ephemient
06/13/2023, 9:39 PMursus
06/13/2023, 9:40 PMFrancesc
06/13/2023, 10:17 PM├── app
├── core
│ ├── time
│ │ ├── time-api
│ │ └── time-impl
│ └── type
│ ├── either
│ └── weather
├── data
│ └── repository
│ ├── city
│ │ ├── cityrepo-api
│ │ └── cityrepo-impl
│ ├── favorite
│ │ ├── favoriterepo-api
│ │ └── favoriterepo-impl
│ ├── recents
│ │ ├── recentsrepo-api
│ │ └── recentsrepo-impl
│ └── weather
│ ├── weatherrepo-api
│ └── weatherrepo-impl
├── domain
│ └── interactor
│ ├── city
│ │ ├── cityinteractor-api
│ │ └── cityinteractor-impl
│ └── weather
│ ├── weatherinteractor-api
│ └── weatherinteractor-impl
├── testing
│ ├── fake
│ └── macrobenchmark
└── ui
├── feature
│ ├── favorites
│ ├── home
│ ├── search
│ └── weather
└── shared
├── assets
├── composable
│ ├── common
│ └── weather
├── deviceclass
├── mvi
├── route
├── styles
└── weathericon
ursus
06/13/2023, 10:20 PM:core:type:either
and then :domain:interactor:city:cityinterfactory-api
probably the question is ..should the the consumer care that it's just a api?ursus
06/13/2023, 10:20 PMephemient
06/13/2023, 10:21 PMFrancesc
06/13/2023, 10:21 PMeither
module is just a wrapper for a success/failure, so it's a single moduleFrancesc
06/13/2023, 10:21 PMf there's only one implementation I do not see any point in having separate `api`/`impl` modulestesting
Francesc
06/13/2023, 10:22 PMephemient
06/13/2023, 10:22 PMursus
06/13/2023, 10:22 PMursus
06/13/2023, 10:23 PMephemient
06/13/2023, 10:23 PMursus
06/13/2023, 10:23 PMinternal
implementations?ephemient
06/13/2023, 10:24 PMursus
06/13/2023, 10:24 PMFrancesc
06/13/2023, 10:24 PMI presume you then haveyesimplementations?internal
Francesc
06/13/2023, 10:24 PMursus
06/13/2023, 10:25 PMursus
06/13/2023, 10:25 PMFrancesc
06/13/2023, 10:26 PMephemient
06/13/2023, 10:26 PMursus
06/13/2023, 10:26 PMursus
06/13/2023, 10:27 PMFrancesc
06/13/2023, 10:28 PMweatherrepo
and then have a remoteweatherepo
and a localweatherrepo
modules as impls, for instanceursus
06/13/2023, 10:28 PMephemient
06/13/2023, 10:28 PMweatherrepo-api
, weatherrepo-remote
and weatherrepo-local
naming would be more conventionalephemient
06/13/2023, 10:29 PMweatherrepo
it would normally be an umbrella that pulls in both the api and implementationFrancesc
06/13/2023, 10:29 PMursus
06/13/2023, 10:30 PMweatherrepo
, and not in core:type:weather
?ursus
06/13/2023, 10:30 PMursus
06/13/2023, 10:31 PMephemient
06/13/2023, 10:31 PMcore:type:weather
and core:impl:weather
will cause issues with Gradle and Maven artifact namesFrancesc
06/13/2023, 10:31 PMephemient
06/13/2023, 10:32 PMursus
06/13/2023, 10:33 PMFrancesc
06/13/2023, 10:33 PMFrancesc
06/13/2023, 10:33 PMursus
06/13/2023, 10:34 PMFrancesc
06/13/2023, 10:36 PMursus
06/13/2023, 10:37 PMFrancesc
06/13/2023, 10:39 PMursus
06/13/2023, 10:40 PMFrancesc
06/13/2023, 10:41 PMursus
06/13/2023, 10:41 PMephemient
06/13/2023, 10:41 PMephemient
06/13/2023, 10:42 PMFrancesc
06/13/2023, 10:42 PMursus
06/13/2023, 10:42 PMFrancesc
06/13/2023, 10:42 PMursus
06/13/2023, 10:43 PMursus
06/13/2023, 10:43 PMFrancesc
06/13/2023, 10:43 PMursus
06/13/2023, 10:44 PMephemient
06/13/2023, 10:44 PMinternal
implementations aren't exposed to clients (unless they break the abstraction boundaries, which is always possible on JVM)ursus
06/13/2023, 10:45 PMephemient
06/13/2023, 10:45 PMpublic
, compile avoidance works as long as the ABI doesn't changeursus
06/13/2023, 10:45 PMFrancesc
06/13/2023, 10:46 PMursus
06/13/2023, 10:46 PMursus
06/13/2023, 10:47 PMFrancesc
06/13/2023, 10:47 PMursus
06/13/2023, 10:48 PMretrofit-api
module, is what I meantFrancesc
06/13/2023, 10:49 PMursus
06/13/2023, 10:49 PMFrancesc
06/13/2023, 10:50 PMursus
06/13/2023, 10:51 PMFrancesc
06/13/2023, 10:52 PMursus
06/13/2023, 10:53 PMursus
06/13/2023, 10:53 PMFrancesc
06/13/2023, 10:53 PMFrancesc
06/13/2023, 10:53 PMephemient
06/13/2023, 10:53 PMursus
06/13/2023, 10:54 PMephemient
06/13/2023, 10:54 PMephemient
06/13/2023, 10:55 PMFrancesc
06/13/2023, 10:55 PMephemient
06/13/2023, 10:56 PMFrancesc
06/13/2023, 10:57 PMephemient
06/13/2023, 10:57 PMursus
06/13/2023, 10:57 PMephemient
06/13/2023, 10:57 PMFrancesc
06/13/2023, 10:57 PMFrancesc
06/13/2023, 10:57 PMbtw what about @Module classes for dagger, can those be internal?yes
ursus
06/13/2023, 10:58 PMephemient
06/13/2023, 10:58 PMFrancesc
06/13/2023, 10:58 PM:app
moduleephemient
06/13/2023, 10:59 PMinternal
has no effect)ursus
06/13/2023, 10:59 PMursus
06/13/2023, 10:59 PMursus
06/13/2023, 10:59 PMursus
06/13/2023, 11:00 PMephemient
06/13/2023, 11:00 PMursus
06/13/2023, 11:01 PMephemient
06/13/2023, 11:01 PMursus
06/13/2023, 11:02 PMephemient
06/13/2023, 11:02 PMursus
06/13/2023, 11:02 PMFrancesc
06/13/2023, 11:03 PMursus
06/13/2023, 11:03 PMephemient
06/13/2023, 11:03 PMursus
06/13/2023, 11:03 PMephemient
06/13/2023, 11:04 PMursus
06/13/2023, 11:05 PMursus
06/13/2023, 11:15 PMcom.squareup.anvil.compiler.api.AnvilCompilationException: Back-end (JVM) Internal error: sk.o2.net.IpAddressProviderImpl is binding a type, but the class is not public. Only public types are supported.
so internal classes don't even work with anvil, ugh.. a non started for collapsing the split 😄