https://github.com/entur/mapstruct-spi-protobuf
Protobuf accessor naming strategy for Mapstruct
https://github.com/entur/mapstruct-spi-protobuf
javabean mapstruct mapstruct-plugin protobuf protobuf3
Last synced: 12 months ago
JSON representation
Protobuf accessor naming strategy for Mapstruct
- Host: GitHub
- URL: https://github.com/entur/mapstruct-spi-protobuf
- Owner: entur
- License: eupl-1.2
- Created: 2018-12-03T14:18:44.000Z (over 7 years ago)
- Default Branch: develop
- Last Pushed: 2024-10-23T19:52:15.000Z (over 1 year ago)
- Last Synced: 2024-10-24T00:01:13.684Z (over 1 year ago)
- Topics: javabean, mapstruct, mapstruct-plugin, protobuf, protobuf3
- Language: Java
- Size: 445 KB
- Stars: 70
- Watchers: 18
- Forks: 19
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
- Support: support-core/pom.xml
Awesome Lists containing this project
README
# Mapstruct SPI implementation for protocol buffers [](https://circleci.com/gh/entur/mapstruct-spi-protobuf)
This naming strategy helps [mapstruct](http://mapstruct.org/) generate working mapping code between your domain classes
and protobuf classes. Both [fullblown Java protobuf](https://github.com/protocolbuffers/protobuf/tree/master/java)
and [protolite](https://github.com/protocolbuffers/protobuf/blob/master/java/lite.md) classes suported.
Requires on mapstruct 1.4.0+.
## ProtobufAccessorNamingStrategy
Extends ```DefaultProtobufAccessorNamingStrategy``` and provides necessary information to map all fields automatically *
except*
* oneof
which require manual mapping.
## ProtobufEnumMappingStrategy
Implements ```EnumMappingStrategy``` and provides complete enum constant mappings if you follow Googles style guide for
enums https://developers.google.com/protocol-buffers/docs/style#enums
If needed you can specify a different postfix for the 0 value enum by passing in `mapstructSpi.enumPostfixOverrides` as
a compilerArg in the format of:
`-AmapstructSpi.enumPostfixOverrides=com.package.root.a=POSTFIX_1,com.package.root.b=POSTFIX_2`
Otherwise, this will default to `UNSPECIFIED` as per the Google style guide.
```xml
maven-compiler-plugin
no.entur.mapstruct.spi
protobuf-spi-impl
LATEST.VERSION
-AmapstructSpi.enumPostfixOverrides=com.company.name=INVALID
```
## Support - Mapping functions:
Standard mapping functions between often used proto types and java types:
* Timestamp <-> Instant
* Duration <-> Duration
* Date <-> LocalDate
* TimeOfDay <-> LocalTime
* byte[] <-> ByteString
See [protobuf-support-standard](support-standard) and/or [protobuf-support-lite](support-lite) folders for a
ready-to-use mapstruct mapper.
# Usage
[See example project](usage/)
NB: Make sure you add `collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED` to your mapping interfaces
as protobuf stubs use the builder pattern.
```
@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
public interface ... {
```
## Maven
NB: Make sure you use the *same version of mapstruct* both in the annotation process and the general dependency.
`mapstruct-spi-protobuf` generally depends on the latest released version of mapstruct.
Add the following section to you maven-compiler-plugin plugin configuration:
```xml
no.entur.mapstruct.spi
protobuf-spi-impl
LATEST.VERSION
org.mapstruct
mapstruct
${org.mapstruct.version}
```
Complete example:
```xml
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
no.entur.mapstruct.spi
protobuf-spi-impl
LATEST.VERSION
org.mapstruct
mapstruct
${org.mapstruct.version}
```
## Gradle
Note: See Maven setup regarding using the same version of mapstruct both in the annotation processor and the general
dependency.
```java
implementation"org.mapstruct:mapstruct:${mapstructVersion}"
annotationProcessor"org.mapstruct:mapstruct-processor:${mapstructVersion}"
annotationProcessor"no.entur.mapstruct.spi:protobuf-spi-impl:LATEST.VERSION"
```
# More information:
http://mapstruct.org/documentation/stable/reference/html/index.html#using-spi