Skip to content

Commit b1a7d96

Browse files
Merge pull request #127 from logic-building/Distinct-For-Struct
Auto generated code for struct includes new function - DistinctP, Dis…
2 parents 9b96b62 + 44871c7 commit b1a7d96

File tree

10 files changed

+487
-58
lines changed

10 files changed

+487
-58
lines changed

README.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,22 @@ Note:
172172
C. "Employee, Teacher" : User defined data types
173173
174174
Options on go:generate :
175-
A. -sort: generate sorting functions for struct will override default behavior of generating sorting functions by each member of sturct of basic types
175+
A: -only: overrides default behavior of generating all the functions. But it always includes Map and Filter
176+
//go:generate gofp -destination fp.go -pkg employee -type "Employee" -only "Distinct, DistinctPtr, DistinctP"
177+
full-list-values-for-only: "Distinct, DistinctPtr, DistinctP, DistinctPPtr, DropLast, DropLastPtr,
178+
DropWhile, DropWhileErr, DropWhilePtr, DropWhilePtrErr, Every, EveryErr, EveryPtr,
179+
EveryPtrErr, FilterMap, FilterMapErr, FilterMapPtr, FilterMapPtrErr,
180+
Remove, RemoveErr, RemovePtr, RemovePtrErr, Reduce, ReduceErr, ReducePtr, ReducePtrErr, Rest, RestPtr,
181+
Reverse, ReversePtr, Some, SomeErr, SomePtr, SomePtrErr, Take, TakePtr,
182+
TakeWhile, TakeWhileErr, TakeWhilePtr, TakeWhilePtrErr"
183+
184+
B. -sort: generate sorting functions for struct will override default behavior of generating sorting functions by each member of sturct of basic types
176185
//go:generate gofp -destination fp.go -pkg employee -type "Employee" -sort "Employee:Name, Employee:Salary"
177186
178-
B. -set: generate set functions-Union, Intersection, Difference, Set, Superset, Subset for struct will override default behavior of generating set functions by each member of struct of basic types
187+
C. -set: generate set functions-Union, Intersection, Difference, Set, Superset, Subset for struct will override default behavior of generating set functions by each member of struct of basic types
179188
//go:generate gofp -destination fp.go -pkg employee -type "Employee" -set "Employee:Name:string"
180189
181-
C. -mapfun: To generate Merge & Zip functions for struct
190+
D. -mapfun: To generate Merge & Zip functions for struct
182191
//go:generate gofp -destination fp.go -pkg employee -type "Employee" -mapfun "true"
183192
Caution: It will complain at runtime if struct contains slice or array
184193

gofp/gofp.go

Lines changed: 78 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -256,45 +256,43 @@ func generateFPCode(pkg, dataTypes, imports string) (string, error) {
256256
template = r.Replace(template)
257257

258258
if len(onlyList) > 0 {
259-
if fp.ExistsStrIgnoreCase("Map", onlyList) {
260-
template += template2.Map()
261-
template = r.Replace(template)
262-
}
259+
// Always include these functions
263260

264-
if fp.ExistsStrIgnoreCase("MapPtr", onlyList) {
265-
template += template2.MapPtr()
266-
template = r.Replace(template)
267-
}
261+
template += template2.Map()
262+
template = r.Replace(template)
268263

269-
if fp.ExistsStrIgnoreCase("MapPtrErr", onlyList) {
270-
template += basic.MapPtrErr()
271-
template = r2.Replace(template)
272-
}
264+
template += template2.MapPtr()
265+
template = r.Replace(template)
273266

274-
if fp.ExistsStrIgnoreCase("MapErr", onlyList) {
275-
template += basic.MapErr()
276-
template = r2.Replace(template)
277-
}
267+
template += basic.MapPtrErr()
268+
template = r2.Replace(template)
278269

279-
if fp.ExistsStrIgnoreCase("Filter", onlyList) {
280-
template += template2.Filter()
281-
template = r.Replace(template)
282-
}
270+
template += basic.MapErr()
271+
template = r2.Replace(template)
283272

284-
if fp.ExistsStrIgnoreCase("FilterPtr", onlyList) {
285-
template += template2.FilterPtr()
286-
template = r.Replace(template)
287-
}
273+
template += template2.Pmap()
274+
template = r.Replace(template)
288275

289-
if fp.ExistsStrIgnoreCase("FilterPtrErr", onlyList) {
290-
template += basic.FilterPtrErr()
291-
template = r2.Replace(template)
292-
}
276+
template += template2.PmapPtr()
277+
template = r.Replace(template)
293278

294-
if fp.ExistsStrIgnoreCase("FilterErr", onlyList) {
295-
template += basic.FilterErr()
296-
template = r2.Replace(template)
297-
}
279+
template += basic.PMapPtrErr()
280+
template = r2.Replace(template)
281+
282+
template += basic.PMapErr()
283+
template = r2.Replace(template)
284+
285+
template += template2.Filter()
286+
template = r.Replace(template)
287+
288+
template += template2.FilterPtr()
289+
template = r.Replace(template)
290+
291+
template += basic.FilterPtrErr()
292+
template = r2.Replace(template)
293+
294+
template += basic.FilterErr()
295+
template = r2.Replace(template)
298296

299297
if fp.ExistsStrIgnoreCase("Remove", onlyList) {
300298
template += template2.Remove()
@@ -396,26 +394,6 @@ func generateFPCode(pkg, dataTypes, imports string) (string, error) {
396394
template = r2.Replace(template)
397395
}
398396

399-
if fp.ExistsStrIgnoreCase("Pmap", onlyList) {
400-
template += template2.Pmap()
401-
template = r.Replace(template)
402-
}
403-
404-
if fp.ExistsStrIgnoreCase("PmapPtr", onlyList) {
405-
template += template2.PmapPtr()
406-
template = r.Replace(template)
407-
}
408-
409-
if fp.ExistsStrIgnoreCase("PMapPtrErr", onlyList) {
410-
template += basic.PMapPtrErr()
411-
template = r2.Replace(template)
412-
}
413-
414-
if fp.ExistsStrIgnoreCase("PMapErr", onlyList) {
415-
template += basic.PMapErr()
416-
template = r2.Replace(template)
417-
}
418-
419397
if fp.ExistsStrIgnoreCase("FilterMap", onlyList) {
420398
template += template2.FilterMap()
421399
template = r.Replace(template)
@@ -481,11 +459,41 @@ func generateFPCode(pkg, dataTypes, imports string) (string, error) {
481459
template = r2.Replace(template)
482460
}
483461

462+
if fp.ExistsStrIgnoreCase("ReversePtr", onlyList) {
463+
template += basic.ReversePtr()
464+
template = r2.Replace(template)
465+
}
466+
484467
if fp.ExistsStrIgnoreCase("Take", onlyList) {
485468
template += basic.Take()
486469
template = r2.Replace(template)
487470
}
488471

472+
if fp.ExistsStrIgnoreCase("TakePtr", onlyList) {
473+
template += basic.TakePtr()
474+
template = r2.Replace(template)
475+
}
476+
477+
if fp.ExistsStrIgnoreCase("DistinctP", onlyList) {
478+
template += basic.DistinctP()
479+
template = r2.Replace(template)
480+
}
481+
482+
if fp.ExistsStrIgnoreCase("DistinctPPtr", onlyList) {
483+
template += basic.DistinctPPtr()
484+
template = r2.Replace(template)
485+
}
486+
487+
if fp.ExistsStrIgnoreCase("Distinct", onlyList) {
488+
template += basic.Distinct()
489+
template = r2.Replace(template)
490+
}
491+
492+
if fp.ExistsStrIgnoreCase("DistinctPtr", onlyList) {
493+
template += basic.DistinctPtr()
494+
template = r2.Replace(template)
495+
}
496+
489497
} else {
490498
template += template2.Map()
491499
template = r.Replace(template)
@@ -622,8 +630,26 @@ func generateFPCode(pkg, dataTypes, imports string) (string, error) {
622630
template += basic.Reverse()
623631
template = r2.Replace(template)
624632

633+
template += basic.ReversePtr()
634+
template = r2.Replace(template)
635+
625636
template += basic.Take()
626637
template = r2.Replace(template)
638+
639+
template += basic.TakePtr()
640+
template = r2.Replace(template)
641+
642+
template += basic.DistinctP()
643+
template = r2.Replace(template)
644+
645+
template += basic.DistinctPPtr()
646+
template = r2.Replace(template)
647+
648+
template += basic.Distinct()
649+
template = r2.Replace(template)
650+
651+
template += basic.DistinctPtr()
652+
template = r2.Replace(template)
627653
}
628654

629655
}

internal/employee/fp.go

Lines changed: 60 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/employee/teacherFP.go

Lines changed: 60 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)