1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
//! # colorbrewer
//! **Library providing colors from ColorBrewer.**
//!
//! Licensed under Apache License, Version 2.0.
//!
//!
//! Use one member of the `Palette` `Enum` and the requested number of colors
//! to get the corresponding color ramp with the `get_color_ramp` function.
//!
//! ```rust
//! use colorbrewer::*;
//!
//! let ramp_orange = get_color_ramp(Palette::Oranges, 3);
//! assert_eq!(Some(vec!["#fee6ce", "#fdae6b", "#e6550d"]), ramp_orange);
//! ```
//! <br>
//! One can also get the corresponding `Palette` enum variant from it's name as a String
//! as it implements the `FromStr` trait.
//!
//! ```rust
//! use colorbrewer::*;
//!
//! let blue_pal: Palette = "Blues".parse().unwrap();
//! assert_eq!(blue_pal, Palette::Blues);
//! let ramp = get_color_ramp(blue_pal, 3);
//! ```
//! <br>
//! Colors are described by their hexadecimal code.<br>
//! These color specifications and designs are developed by Cynthia Brewer (http://colorbrewer2.org/).
//!

/// Available color palettes
#[derive(Debug, PartialEq)]
pub enum Palette {
    YlGn,
    YlGnBu,
    GnBu,
    BuGn,
    PuBuGn,
    PuBu,
    BuPu,
    RdPu,
    PuRd,
    OrRd,
    YlOrRd,
    YlOrBr,
    Purples,
    Blues,
    Greens,
    Oranges,
    Reds,
    Greys,
    PuOr,
    BrBG,
    PRGn,
    PiYG,
    RdBu,
    RdGy,
    RdYlBu,
    Spectral,
    RdYlGn,
    Accent,
    Dark2,
    Paired,
    Pastel1,
    Pastel2,
    Set1,
    Set2,
    Set3,
}

impl std::str::FromStr for Palette {
    type Err = &'static str;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "YlGn" => Ok(Palette::YlGn),
            "YlGnBu" => Ok(Palette::YlGnBu),
            "GnBu" => Ok(Palette::GnBu),
            "BuGn" => Ok(Palette::BuGn),
            "PuBuGn" => Ok(Palette::PuBuGn),
            "PuBu" => Ok(Palette::PuBu),
            "BuPu" => Ok(Palette::BuPu),
            "RdPu" => Ok(Palette::RdPu),
            "PuRd" => Ok(Palette::PuRd),
            "OrRd" => Ok(Palette::OrRd),
            "YlOrRd" => Ok(Palette::YlOrRd),
            "YlOrBr" => Ok(Palette::YlOrBr),
            "Purples" => Ok(Palette::Purples),
            "Blues" => Ok(Palette::Blues),
            "Greens" => Ok(Palette::Greens),
            "Oranges" => Ok(Palette::Oranges),
            "Reds" => Ok(Palette::Reds),
            "Greys" => Ok(Palette::Greys),
            "PuOr" => Ok(Palette::PuOr),
            "BrBG" => Ok(Palette::BrBG),
            "PRGn" => Ok(Palette::PRGn),
            "PiYG" => Ok(Palette::PiYG),
            "RdBu" => Ok(Palette::RdBu),
            "RdGy" => Ok(Palette::RdGy),
            "RdYlBu" => Ok(Palette::RdYlBu),
            "Spectral" => Ok(Palette::Spectral),
            "RdYlGn" => Ok(Palette::RdYlGn),
            "Accent" => Ok(Palette::Accent),
            "Dark2" => Ok(Palette::Dark2),
            "Paired" => Ok(Palette::Paired),
            "Pastel1" => Ok(Palette::Pastel1),
            "Pastel2" => Ok(Palette::Pastel2),
            "Set1" => Ok(Palette::Set1),
            "Set2" => Ok(Palette::Set2),
            "Set3" => Ok(Palette::Set3),
            _ => Err("not a valid value"),
        }
    }
}

/// Function to get the requested color ramp
/// according to a given name and number of colors.
/// Return `None` if there is no color ramp defined for this value of `nb_value`.
pub fn get_color_ramp(name: Palette, nb_value: u32) -> Option<Vec<&'static str>> {
    match name {
        Palette::YlGn => {
            match nb_value {
                3 => Some(vec!["#f7fcb9", "#addd8e", "#31a354"]),
                4 => Some(vec!["#ffffcc", "#c2e699", "#78c679", "#238443"]),
                5 => Some(vec!["#ffffcc", "#c2e699", "#78c679", "#31a354", "#006837"]),
                6 => Some(vec!["#ffffcc", "#d9f0a3", "#addd8e", "#78c679", "#31a354", "#006837"]),
                7 => {
                    Some(vec!["#ffffcc", "#d9f0a3", "#addd8e", "#78c679", "#41ab5d", "#238443",
                              "#005a32"])
                }
                8 => {
                    Some(vec!["#ffffe5", "#f7fcb9", "#d9f0a3", "#addd8e", "#78c679", "#41ab5d",
                              "#238443", "#005a32"])
                }
                9 => {
                    Some(vec!["#ffffe5", "#f7fcb9", "#d9f0a3", "#addd8e", "#78c679", "#41ab5d",
                              "#238443", "#006837", "#004529"])
                }
                _ => None,
            }
        }
        Palette::YlGnBu => {
            match nb_value {
                3 => Some(vec!["#edf8b1", "#7fcdbb", "#2c7fb8"]),
                4 => Some(vec!["#ffffcc", "#a1dab4", "#41b6c4", "#225ea8"]),
                5 => Some(vec!["#ffffcc", "#a1dab4", "#41b6c4", "#2c7fb8", "#253494"]),
                6 => Some(vec!["#ffffcc", "#c7e9b4", "#7fcdbb", "#41b6c4", "#2c7fb8", "#253494"]),
                7 => {
                    Some(vec!["#ffffcc", "#c7e9b4", "#7fcdbb", "#41b6c4", "#1d91c0", "#225ea8",
                              "#0c2c84"])
                }
                8 => {
                    Some(vec!["#ffffd9", "#edf8b1", "#c7e9b4", "#7fcdbb", "#41b6c4", "#1d91c0",
                              "#225ea8", "#0c2c84"])
                }
                9 => {
                    Some(vec!["#ffffd9", "#edf8b1", "#c7e9b4", "#7fcdbb", "#41b6c4", "#1d91c0",
                              "#225ea8", "#253494", "#081d58"])
                }
                _ => None,
            }
        }
        Palette::GnBu => {
            match nb_value {
                3 => Some(vec!["#e0f3db", "#a8ddb5", "#43a2ca"]),
                4 => Some(vec!["#f0f9e8", "#bae4bc", "#7bccc4", "#2b8cbe"]),
                5 => Some(vec!["#f0f9e8", "#bae4bc", "#7bccc4", "#43a2ca", "#0868ac"]),
                6 => Some(vec!["#f0f9e8", "#ccebc5", "#a8ddb5", "#7bccc4", "#43a2ca", "#0868ac"]),
                7 => {
                    Some(vec!["#f0f9e8", "#ccebc5", "#a8ddb5", "#7bccc4", "#4eb3d3", "#2b8cbe",
                              "#08589e"])
                }
                8 => {
                    Some(vec!["#f7fcf0", "#e0f3db", "#ccebc5", "#a8ddb5", "#7bccc4", "#4eb3d3",
                              "#2b8cbe", "#08589e"])
                }
                9 => {
                    Some(vec!["#f7fcf0", "#e0f3db", "#ccebc5", "#a8ddb5", "#7bccc4", "#4eb3d3",
                              "#2b8cbe", "#0868ac", "#084081"])
                }
                _ => None,
            }
        }
        Palette::BuGn => {
            match nb_value {
                3 => Some(vec!["#e5f5f9", "#99d8c9", "#2ca25f"]),
                4 => Some(vec!["#edf8fb", "#b2e2e2", "#66c2a4", "#238b45"]),
                5 => Some(vec!["#edf8fb", "#b2e2e2", "#66c2a4", "#2ca25f", "#006d2c"]),
                6 => Some(vec!["#edf8fb", "#ccece6", "#99d8c9", "#66c2a4", "#2ca25f", "#006d2c"]),
                7 => {
                    Some(vec!["#edf8fb", "#ccece6", "#99d8c9", "#66c2a4", "#41ae76", "#238b45",
                              "#005824"])
                }
                8 => {
                    Some(vec!["#f7fcfd", "#e5f5f9", "#ccece6", "#99d8c9", "#66c2a4", "#41ae76",
                              "#238b45", "#005824"])
                }
                9 => {
                    Some(vec!["#f7fcfd", "#e5f5f9", "#ccece6", "#99d8c9", "#66c2a4", "#41ae76",
                              "#238b45", "#006d2c", "#00441b"])
                }
                _ => None,
            }
        }
        Palette::PuBuGn => {
            match nb_value {
                3 => Some(vec!["#ece2f0", "#a6bddb", "#1c9099"]),
                4 => Some(vec!["#f6eff7", "#bdc9e1", "#67a9cf", "#02818a"]),
                5 => Some(vec!["#f6eff7", "#bdc9e1", "#67a9cf", "#1c9099", "#016c59"]),
                6 => Some(vec!["#f6eff7", "#d0d1e6", "#a6bddb", "#67a9cf", "#1c9099", "#016c59"]),
                7 => {
                    Some(vec!["#f6eff7", "#d0d1e6", "#a6bddb", "#67a9cf", "#3690c0", "#02818a",
                              "#016450"])
                }
                8 => {
                    Some(vec!["#fff7fb", "#ece2f0", "#d0d1e6", "#a6bddb", "#67a9cf", "#3690c0",
                              "#02818a", "#016450"])
                }
                9 => {
                    Some(vec!["#fff7fb", "#ece2f0", "#d0d1e6", "#a6bddb", "#67a9cf", "#3690c0",
                              "#02818a", "#016c59", "#014636"])
                }
                _ => None,
            }
        }
        Palette::PuBu => {
            match nb_value {
                3 => Some(vec!["#ece7f2", "#a6bddb", "#2b8cbe"]),
                4 => Some(vec!["#f1eef6", "#bdc9e1", "#74a9cf", "#0570b0"]),
                5 => Some(vec!["#f1eef6", "#bdc9e1", "#74a9cf", "#2b8cbe", "#045a8d"]),
                6 => Some(vec!["#f1eef6", "#d0d1e6", "#a6bddb", "#74a9cf", "#2b8cbe", "#045a8d"]),
                7 => {
                    Some(vec!["#f1eef6", "#d0d1e6", "#a6bddb", "#74a9cf", "#3690c0", "#0570b0",
                              "#034e7b"])
                }
                8 => {
                    Some(vec!["#fff7fb", "#ece7f2", "#d0d1e6", "#a6bddb", "#74a9cf", "#3690c0",
                              "#0570b0", "#034e7b"])
                }
                9 => {
                    Some(vec!["#fff7fb", "#ece7f2", "#d0d1e6", "#a6bddb", "#74a9cf", "#3690c0",
                              "#0570b0", "#045a8d", "#023858"])
                }
                _ => None,
            }
        }
        Palette::BuPu => {
            match nb_value {
                3 => Some(vec!["#e0ecf4", "#9ebcda", "#8856a7"]),
                4 => Some(vec!["#edf8fb", "#b3cde3", "#8c96c6", "#88419d"]),
                5 => Some(vec!["#edf8fb", "#b3cde3", "#8c96c6", "#8856a7", "#810f7c"]),
                6 => Some(vec!["#edf8fb", "#bfd3e6", "#9ebcda", "#8c96c6", "#8856a7", "#810f7c"]),
                7 => {
                    Some(vec!["#edf8fb", "#bfd3e6", "#9ebcda", "#8c96c6", "#8c6bb1", "#88419d",
                              "#6e016b"])
                }
                8 => {
                    Some(vec!["#f7fcfd", "#e0ecf4", "#bfd3e6", "#9ebcda", "#8c96c6", "#8c6bb1",
                              "#88419d", "#6e016b"])
                }
                9 => {
                    Some(vec!["#f7fcfd", "#e0ecf4", "#bfd3e6", "#9ebcda", "#8c96c6", "#8c6bb1",
                              "#88419d", "#810f7c", "#4d004b"])
                }
                _ => None,
            }
        }
        Palette::RdPu => {
            match nb_value {
                3 => Some(vec!["#fde0dd", "#fa9fb5", "#c51b8a"]),
                4 => Some(vec!["#feebe2", "#fbb4b9", "#f768a1", "#ae017e"]),
                5 => Some(vec!["#feebe2", "#fbb4b9", "#f768a1", "#c51b8a", "#7a0177"]),
                6 => Some(vec!["#feebe2", "#fcc5c0", "#fa9fb5", "#f768a1", "#c51b8a", "#7a0177"]),
                7 => {
                    Some(vec!["#feebe2", "#fcc5c0", "#fa9fb5", "#f768a1", "#dd3497", "#ae017e",
                              "#7a0177"])
                }
                8 => {
                    Some(vec!["#fff7f3", "#fde0dd", "#fcc5c0", "#fa9fb5", "#f768a1", "#dd3497",
                              "#ae017e", "#7a0177"])
                }
                9 => {
                    Some(vec!["#fff7f3", "#fde0dd", "#fcc5c0", "#fa9fb5", "#f768a1", "#dd3497",
                              "#ae017e", "#7a0177", "#49006a"])
                }
                _ => None,
            }
        }
        Palette::PuRd => {
            match nb_value {
                3 => Some(vec!["#e7e1ef", "#c994c7", "#dd1c77"]),
                4 => Some(vec!["#f1eef6", "#d7b5d8", "#df65b0", "#ce1256"]),
                5 => Some(vec!["#f1eef6", "#d7b5d8", "#df65b0", "#dd1c77", "#980043"]),
                6 => Some(vec!["#f1eef6", "#d4b9da", "#c994c7", "#df65b0", "#dd1c77", "#980043"]),
                7 => {
                    Some(vec!["#f1eef6", "#d4b9da", "#c994c7", "#df65b0", "#e7298a", "#ce1256",
                              "#91003f"])
                }
                8 => {
                    Some(vec!["#f7f4f9", "#e7e1ef", "#d4b9da", "#c994c7", "#df65b0", "#e7298a",
                              "#ce1256", "#91003f"])
                }
                9 => {
                    Some(vec!["#f7f4f9", "#e7e1ef", "#d4b9da", "#c994c7", "#df65b0", "#e7298a",
                              "#ce1256", "#980043", "#67001f"])
                }
                _ => None,
            }
        }
        Palette::OrRd => {
            match nb_value {
                3 => Some(vec!["#fee8c8", "#fdbb84", "#e34a33"]),
                4 => Some(vec!["#fef0d9", "#fdcc8a", "#fc8d59", "#d7301f"]),
                5 => Some(vec!["#fef0d9", "#fdcc8a", "#fc8d59", "#e34a33", "#b30000"]),
                6 => Some(vec!["#fef0d9", "#fdd49e", "#fdbb84", "#fc8d59", "#e34a33", "#b30000"]),
                7 => {
                    Some(vec!["#fef0d9", "#fdd49e", "#fdbb84", "#fc8d59", "#ef6548", "#d7301f",
                              "#990000"])
                }
                8 => {
                    Some(vec!["#fff7ec", "#fee8c8", "#fdd49e", "#fdbb84", "#fc8d59", "#ef6548",
                              "#d7301f", "#990000"])
                }
                9 => {
                    Some(vec!["#fff7ec", "#fee8c8", "#fdd49e", "#fdbb84", "#fc8d59", "#ef6548",
                              "#d7301f", "#b30000", "#7f0000"])
                }
                _ => None,
            }
        }
        Palette::YlOrRd => {
            match nb_value {
                3 => Some(vec!["#ffeda0", "#feb24c", "#f03b20"]),
                4 => Some(vec!["#ffffb2", "#fecc5c", "#fd8d3c", "#e31a1c"]),
                5 => Some(vec!["#ffffb2", "#fecc5c", "#fd8d3c", "#f03b20", "#bd0026"]),
                6 => Some(vec!["#ffffb2", "#fed976", "#feb24c", "#fd8d3c", "#f03b20", "#bd0026"]),
                7 => {
                    Some(vec!["#ffffb2", "#fed976", "#feb24c", "#fd8d3c", "#fc4e2a", "#e31a1c",
                              "#b10026"])
                }
                8 => {
                    Some(vec!["#ffffcc", "#ffeda0", "#fed976", "#feb24c", "#fd8d3c", "#fc4e2a",
                              "#e31a1c", "#b10026"])
                }
                9 => {
                    Some(vec!["#ffffcc", "#ffeda0", "#fed976", "#feb24c", "#fd8d3c", "#fc4e2a",
                              "#e31a1c", "#bd0026", "#800026"])
                }
                _ => None,
            }
        }
        Palette::YlOrBr => {
            match nb_value {
                3 => Some(vec!["#fff7bc", "#fec44f", "#d95f0e"]),
                4 => Some(vec!["#ffffd4", "#fed98e", "#fe9929", "#cc4c02"]),
                5 => Some(vec!["#ffffd4", "#fed98e", "#fe9929", "#d95f0e", "#993404"]),
                6 => Some(vec!["#ffffd4", "#fee391", "#fec44f", "#fe9929", "#d95f0e", "#993404"]),
                7 => {
                    Some(vec!["#ffffd4", "#fee391", "#fec44f", "#fe9929", "#ec7014", "#cc4c02",
                              "#8c2d04"])
                }
                8 => {
                    Some(vec!["#ffffe5", "#fff7bc", "#fee391", "#fec44f", "#fe9929", "#ec7014",
                              "#cc4c02", "#8c2d04"])
                }
                9 => {
                    Some(vec!["#ffffe5", "#fff7bc", "#fee391", "#fec44f", "#fe9929", "#ec7014",
                              "#cc4c02", "#993404", "#662506"])
                }
                _ => None,
            }
        }
        Palette::Purples => {
            match nb_value {
                3 => Some(vec!["#efedf5", "#bcbddc", "#756bb1"]),
                4 => Some(vec!["#f2f0f7", "#cbc9e2", "#9e9ac8", "#6a51a3"]),
                5 => Some(vec!["#f2f0f7", "#cbc9e2", "#9e9ac8", "#756bb1", "#54278f"]),
                6 => Some(vec!["#f2f0f7", "#dadaeb", "#bcbddc", "#9e9ac8", "#756bb1", "#54278f"]),
                7 => {
                    Some(vec!["#f2f0f7", "#dadaeb", "#bcbddc", "#9e9ac8", "#807dba", "#6a51a3",
                              "#4a1486"])
                }
                8 => {
                    Some(vec!["#fcfbfd", "#efedf5", "#dadaeb", "#bcbddc", "#9e9ac8", "#807dba",
                              "#6a51a3", "#4a1486"])
                }
                9 => {
                    Some(vec!["#fcfbfd", "#efedf5", "#dadaeb", "#bcbddc", "#9e9ac8", "#807dba",
                              "#6a51a3", "#54278f", "#3f007d"])
                }
                _ => None,
            }
        }
        Palette::Blues => {
            match nb_value {
                3 => Some(vec!["#deebf7", "#9ecae1", "#3182bd"]),
                4 => Some(vec!["#eff3ff", "#bdd7e7", "#6baed6", "#2171b5"]),
                5 => Some(vec!["#eff3ff", "#bdd7e7", "#6baed6", "#3182bd", "#08519c"]),
                6 => Some(vec!["#eff3ff", "#c6dbef", "#9ecae1", "#6baed6", "#3182bd", "#08519c"]),
                7 => {
                    Some(vec!["#eff3ff", "#c6dbef", "#9ecae1", "#6baed6", "#4292c6", "#2171b5",
                              "#084594"])
                }
                8 => {
                    Some(vec!["#f7fbff", "#deebf7", "#c6dbef", "#9ecae1", "#6baed6", "#4292c6",
                              "#2171b5", "#084594"])
                }
                9 => {
                    Some(vec!["#f7fbff", "#deebf7", "#c6dbef", "#9ecae1", "#6baed6", "#4292c6",
                              "#2171b5", "#08519c", "#08306b"])
                }
                _ => None,
            }
        }
        Palette::Greens => {
            match nb_value {
                3 => Some(vec!["#e5f5e0", "#a1d99b", "#31a354"]),
                4 => Some(vec!["#edf8e9", "#bae4b3", "#74c476", "#238b45"]),
                5 => Some(vec!["#edf8e9", "#bae4b3", "#74c476", "#31a354", "#006d2c"]),
                6 => Some(vec!["#edf8e9", "#c7e9c0", "#a1d99b", "#74c476", "#31a354", "#006d2c"]),
                7 => {
                    Some(vec!["#edf8e9", "#c7e9c0", "#a1d99b", "#74c476", "#41ab5d", "#238b45",
                              "#005a32"])
                }
                8 => {
                    Some(vec!["#f7fcf5", "#e5f5e0", "#c7e9c0", "#a1d99b", "#74c476", "#41ab5d",
                              "#238b45", "#005a32"])
                }
                9 => {
                    Some(vec!["#f7fcf5", "#e5f5e0", "#c7e9c0", "#a1d99b", "#74c476", "#41ab5d",
                              "#238b45", "#006d2c", "#00441b"])
                }
                _ => None,
            }
        }
        Palette::Oranges => {
            match nb_value {
                3 => Some(vec!["#fee6ce", "#fdae6b", "#e6550d"]),
                4 => Some(vec!["#feedde", "#fdbe85", "#fd8d3c", "#d94701"]),
                5 => Some(vec!["#feedde", "#fdbe85", "#fd8d3c", "#e6550d", "#a63603"]),
                6 => Some(vec!["#feedde", "#fdd0a2", "#fdae6b", "#fd8d3c", "#e6550d", "#a63603"]),
                7 => {
                    Some(vec!["#feedde", "#fdd0a2", "#fdae6b", "#fd8d3c", "#f16913", "#d94801",
                              "#8c2d04"])
                }
                8 => {
                    Some(vec!["#fff5eb", "#fee6ce", "#fdd0a2", "#fdae6b", "#fd8d3c", "#f16913",
                              "#d94801", "#8c2d04"])
                }
                9 => {
                    Some(vec!["#fff5eb", "#fee6ce", "#fdd0a2", "#fdae6b", "#fd8d3c", "#f16913",
                              "#d94801", "#a63603", "#7f2704"])
                }
                _ => None,
            }
        }
        Palette::Reds => {
            match nb_value {
                3 => Some(vec!["#fee0d2", "#fc9272", "#de2d26"]),
                4 => Some(vec!["#fee5d9", "#fcae91", "#fb6a4a", "#cb181d"]),
                5 => Some(vec!["#fee5d9", "#fcae91", "#fb6a4a", "#de2d26", "#a50f15"]),
                6 => Some(vec!["#fee5d9", "#fcbba1", "#fc9272", "#fb6a4a", "#de2d26", "#a50f15"]),
                7 => {
                    Some(vec!["#fee5d9", "#fcbba1", "#fc9272", "#fb6a4a", "#ef3b2c", "#cb181d",
                              "#99000d"])
                }
                8 => {
                    Some(vec!["#fff5f0", "#fee0d2", "#fcbba1", "#fc9272", "#fb6a4a", "#ef3b2c",
                              "#cb181d", "#99000d"])
                }
                9 => {
                    Some(vec!["#fff5f0", "#fee0d2", "#fcbba1", "#fc9272", "#fb6a4a", "#ef3b2c",
                              "#cb181d", "#a50f15", "#67000d"])
                }
                _ => None,
            }
        }
        Palette::Greys => {
            match nb_value {
                3 => Some(vec!["#f0f0f0", "#bdbdbd", "#636363"]),
                4 => Some(vec!["#f7f7f7", "#cccccc", "#969696", "#525252"]),
                5 => Some(vec!["#f7f7f7", "#cccccc", "#969696", "#636363", "#252525"]),
                6 => Some(vec!["#f7f7f7", "#d9d9d9", "#bdbdbd", "#969696", "#636363", "#252525"]),
                7 => {
                    Some(vec!["#f7f7f7", "#d9d9d9", "#bdbdbd", "#969696", "#737373", "#525252",
                              "#252525"])
                }
                8 => {
                    Some(vec!["#ffffff", "#f0f0f0", "#d9d9d9", "#bdbdbd", "#969696", "#737373",
                              "#525252", "#252525"])
                }
                9 => {
                    Some(vec!["#ffffff", "#f0f0f0", "#d9d9d9", "#bdbdbd", "#969696", "#737373",
                              "#525252", "#252525", "#000000"])
                }
                _ => None,
            }
        }
        Palette::PuOr => {
            match nb_value {
                3 => Some(vec!["#f1a340", "#f7f7f7", "#998ec3"]),
                4 => Some(vec!["#e66101", "#fdb863", "#b2abd2", "#5e3c99"]),
                5 => Some(vec!["#e66101", "#fdb863", "#f7f7f7", "#b2abd2", "#5e3c99"]),
                6 => Some(vec!["#b35806", "#f1a340", "#fee0b6", "#d8daeb", "#998ec3", "#542788"]),
                7 => {
                    Some(vec!["#b35806", "#f1a340", "#fee0b6", "#f7f7f7", "#d8daeb", "#998ec3",
                              "#542788"])
                }
                8 => {
                    Some(vec!["#b35806", "#e08214", "#fdb863", "#fee0b6", "#d8daeb", "#b2abd2",
                              "#8073ac", "#542788"])
                }
                9 => {
                    Some(vec!["#b35806", "#e08214", "#fdb863", "#fee0b6", "#f7f7f7", "#d8daeb",
                              "#b2abd2", "#8073ac", "#542788"])
                }
                10 => {
                    Some(vec!["#7f3b08", "#b35806", "#e08214", "#fdb863", "#fee0b6", "#d8daeb",
                              "#b2abd2", "#8073ac", "#542788", "#2d004b"])
                }
                11 => {
                    Some(vec!["#7f3b08", "#b35806", "#e08214", "#fdb863", "#fee0b6", "#f7f7f7",
                              "#d8daeb", "#b2abd2", "#8073ac", "#542788", "#2d004b"])
                }
                _ => None,
            }
        }
        Palette::BrBG => {
            match nb_value {
                3 => Some(vec!["#d8b365", "#f5f5f5", "#5ab4ac"]),
                4 => Some(vec!["#a6611a", "#dfc27d", "#80cdc1", "#018571"]),
                5 => Some(vec!["#a6611a", "#dfc27d", "#f5f5f5", "#80cdc1", "#018571"]),
                6 => Some(vec!["#8c510a", "#d8b365", "#f6e8c3", "#c7eae5", "#5ab4ac", "#01665e"]),
                7 => {
                    Some(vec!["#8c510a", "#d8b365", "#f6e8c3", "#f5f5f5", "#c7eae5", "#5ab4ac",
                              "#01665e"])
                }
                8 => {
                    Some(vec!["#8c510a", "#bf812d", "#dfc27d", "#f6e8c3", "#c7eae5", "#80cdc1",
                              "#35978f", "#01665e"])
                }
                9 => {
                    Some(vec!["#8c510a", "#bf812d", "#dfc27d", "#f6e8c3", "#f5f5f5", "#c7eae5",
                              "#80cdc1", "#35978f", "#01665e"])
                }
                10 => {
                    Some(vec!["#543005", "#8c510a", "#bf812d", "#dfc27d", "#f6e8c3", "#c7eae5",
                              "#80cdc1", "#35978f", "#01665e", "#003c30"])
                }
                11 => {
                    Some(vec!["#543005", "#8c510a", "#bf812d", "#dfc27d", "#f6e8c3", "#f5f5f5",
                              "#c7eae5", "#80cdc1", "#35978f", "#01665e", "#003c30"])
                }
                _ => None,
            }
        }
        Palette::PRGn => {
            match nb_value {
                3 => Some(vec!["#af8dc3", "#f7f7f7", "#7fbf7b"]),
                4 => Some(vec!["#7b3294", "#c2a5cf", "#a6dba0", "#008837"]),
                5 => Some(vec!["#7b3294", "#c2a5cf", "#f7f7f7", "#a6dba0", "#008837"]),
                6 => Some(vec!["#762a83", "#af8dc3", "#e7d4e8", "#d9f0d3", "#7fbf7b", "#1b7837"]),
                7 => {
                    Some(vec!["#762a83", "#af8dc3", "#e7d4e8", "#f7f7f7", "#d9f0d3", "#7fbf7b",
                              "#1b7837"])
                }
                8 => {
                    Some(vec!["#762a83", "#9970ab", "#c2a5cf", "#e7d4e8", "#d9f0d3", "#a6dba0",
                              "#5aae61", "#1b7837"])
                }
                9 => {
                    Some(vec!["#762a83", "#9970ab", "#c2a5cf", "#e7d4e8", "#f7f7f7", "#d9f0d3",
                              "#a6dba0", "#5aae61", "#1b7837"])
                }
                10 => {
                    Some(vec!["#40004b", "#762a83", "#9970ab", "#c2a5cf", "#e7d4e8", "#d9f0d3",
                              "#a6dba0", "#5aae61", "#1b7837", "#00441b"])
                }
                11 => {
                    Some(vec!["#40004b", "#762a83", "#9970ab", "#c2a5cf", "#e7d4e8", "#f7f7f7",
                              "#d9f0d3", "#a6dba0", "#5aae61", "#1b7837", "#00441b"])
                }
                _ => None,
            }
        }
        Palette::PiYG => {
            match nb_value {
                3 => Some(vec!["#e9a3c9", "#f7f7f7", "#a1d76a"]),
                4 => Some(vec!["#d01c8b", "#f1b6da", "#b8e186", "#4dac26"]),
                5 => Some(vec!["#d01c8b", "#f1b6da", "#f7f7f7", "#b8e186", "#4dac26"]),
                6 => Some(vec!["#c51b7d", "#e9a3c9", "#fde0ef", "#e6f5d0", "#a1d76a", "#4d9221"]),
                7 => {
                    Some(vec!["#c51b7d", "#e9a3c9", "#fde0ef", "#f7f7f7", "#e6f5d0", "#a1d76a",
                              "#4d9221"])
                }
                8 => {
                    Some(vec!["#c51b7d", "#de77ae", "#f1b6da", "#fde0ef", "#e6f5d0", "#b8e186",
                              "#7fbc41", "#4d9221"])
                }
                9 => {
                    Some(vec!["#c51b7d", "#de77ae", "#f1b6da", "#fde0ef", "#f7f7f7", "#e6f5d0",
                              "#b8e186", "#7fbc41", "#4d9221"])
                }
                10 => {
                    Some(vec!["#8e0152", "#c51b7d", "#de77ae", "#f1b6da", "#fde0ef", "#e6f5d0",
                              "#b8e186", "#7fbc41", "#4d9221", "#276419"])
                }
                11 => {
                    Some(vec!["#8e0152", "#c51b7d", "#de77ae", "#f1b6da", "#fde0ef", "#f7f7f7",
                              "#e6f5d0", "#b8e186", "#7fbc41", "#4d9221", "#276419"])
                }
                _ => None,
            }
        }
        Palette::RdBu => {
            match nb_value {
                3 => Some(vec!["#ef8a62", "#f7f7f7", "#67a9cf"]),
                4 => Some(vec!["#ca0020", "#f4a582", "#92c5de", "#0571b0"]),
                5 => Some(vec!["#ca0020", "#f4a582", "#f7f7f7", "#92c5de", "#0571b0"]),
                6 => Some(vec!["#b2182b", "#ef8a62", "#fddbc7", "#d1e5f0", "#67a9cf", "#2166ac"]),
                7 => {
                    Some(vec!["#b2182b", "#ef8a62", "#fddbc7", "#f7f7f7", "#d1e5f0", "#67a9cf",
                              "#2166ac"])
                }
                8 => {
                    Some(vec!["#b2182b", "#d6604d", "#f4a582", "#fddbc7", "#d1e5f0", "#92c5de",
                              "#4393c3", "#2166ac"])
                }
                9 => {
                    Some(vec!["#b2182b", "#d6604d", "#f4a582", "#fddbc7", "#f7f7f7", "#d1e5f0",
                              "#92c5de", "#4393c3", "#2166ac"])
                }
                10 => {
                    Some(vec!["#67001f", "#b2182b", "#d6604d", "#f4a582", "#fddbc7", "#d1e5f0",
                              "#92c5de", "#4393c3", "#2166ac", "#053061"])
                }
                11 => {
                    Some(vec!["#67001f", "#b2182b", "#d6604d", "#f4a582", "#fddbc7", "#f7f7f7",
                              "#d1e5f0", "#92c5de", "#4393c3", "#2166ac", "#053061"])
                }
                _ => None,
            }
        }
        Palette::RdGy => {
            match nb_value {
                3 => Some(vec!["#ef8a62", "#ffffff", "#999999"]),
                4 => Some(vec!["#ca0020", "#f4a582", "#bababa", "#404040"]),
                5 => Some(vec!["#ca0020", "#f4a582", "#ffffff", "#bababa", "#404040"]),
                6 => Some(vec!["#b2182b", "#ef8a62", "#fddbc7", "#e0e0e0", "#999999", "#4d4d4d"]),
                7 => {
                    Some(vec!["#b2182b", "#ef8a62", "#fddbc7", "#ffffff", "#e0e0e0", "#999999",
                              "#4d4d4d"])
                }
                8 => {
                    Some(vec!["#b2182b", "#d6604d", "#f4a582", "#fddbc7", "#e0e0e0", "#bababa",
                              "#878787", "#4d4d4d"])
                }
                9 => {
                    Some(vec!["#b2182b", "#d6604d", "#f4a582", "#fddbc7", "#ffffff", "#e0e0e0",
                              "#bababa", "#878787", "#4d4d4d"])
                }
                10 => {
                    Some(vec!["#67001f", "#b2182b", "#d6604d", "#f4a582", "#fddbc7", "#e0e0e0",
                              "#bababa", "#878787", "#4d4d4d", "#1a1a1a"])
                }
                11 => {
                    Some(vec!["#67001f", "#b2182b", "#d6604d", "#f4a582", "#fddbc7", "#ffffff",
                              "#e0e0e0", "#bababa", "#878787", "#4d4d4d", "#1a1a1a"])
                }
                _ => None,
            }
        }
        Palette::RdYlBu => {
            match nb_value {
                3 => Some(vec!["#fc8d59", "#ffffbf", "#91bfdb"]),
                4 => Some(vec!["#d7191c", "#fdae61", "#abd9e9", "#2c7bb6"]),
                5 => Some(vec!["#d7191c", "#fdae61", "#ffffbf", "#abd9e9", "#2c7bb6"]),
                6 => Some(vec!["#d73027", "#fc8d59", "#fee090", "#e0f3f8", "#91bfdb", "#4575b4"]),
                7 => {
                    Some(vec!["#d73027", "#fc8d59", "#fee090", "#ffffbf", "#e0f3f8", "#91bfdb",
                              "#4575b4"])
                }
                8 => {
                    Some(vec!["#d73027", "#f46d43", "#fdae61", "#fee090", "#e0f3f8", "#abd9e9",
                              "#74add1", "#4575b4"])
                }
                9 => {
                    Some(vec!["#d73027", "#f46d43", "#fdae61", "#fee090", "#ffffbf", "#e0f3f8",
                              "#abd9e9", "#74add1", "#4575b4"])
                }
                10 => {
                    Some(vec!["#a50026", "#d73027", "#f46d43", "#fdae61", "#fee090", "#e0f3f8",
                              "#abd9e9", "#74add1", "#4575b4", "#313695"])
                }
                11 => {
                    Some(vec!["#a50026", "#d73027", "#f46d43", "#fdae61", "#fee090", "#ffffbf",
                              "#e0f3f8", "#abd9e9", "#74add1", "#4575b4", "#313695"])
                }
                _ => None,
            }
        }
        Palette::Spectral => {
            match nb_value {
                3 => Some(vec!["#fc8d59", "#ffffbf", "#99d594"]),
                4 => Some(vec!["#d7191c", "#fdae61", "#abdda4", "#2b83ba"]),
                5 => Some(vec!["#d7191c", "#fdae61", "#ffffbf", "#abdda4", "#2b83ba"]),
                6 => Some(vec!["#d53e4f", "#fc8d59", "#fee08b", "#e6f598", "#99d594", "#3288bd"]),
                7 => {
                    Some(vec!["#d53e4f", "#fc8d59", "#fee08b", "#ffffbf", "#e6f598", "#99d594",
                              "#3288bd"])
                }
                8 => {
                    Some(vec!["#d53e4f", "#f46d43", "#fdae61", "#fee08b", "#e6f598", "#abdda4",
                              "#66c2a5", "#3288bd"])
                }
                9 => {
                    Some(vec!["#d53e4f", "#f46d43", "#fdae61", "#fee08b", "#ffffbf", "#e6f598",
                              "#abdda4", "#66c2a5", "#3288bd"])
                }
                10 => {
                    Some(vec!["#9e0142", "#d53e4f", "#f46d43", "#fdae61", "#fee08b", "#e6f598",
                              "#abdda4", "#66c2a5", "#3288bd", "#5e4fa2"])
                }
                11 => {
                    Some(vec!["#9e0142", "#d53e4f", "#f46d43", "#fdae61", "#fee08b", "#ffffbf",
                              "#e6f598", "#abdda4", "#66c2a5", "#3288bd", "#5e4fa2"])
                }
                _ => None,
            }
        }
        Palette::RdYlGn => {
            match nb_value {
                3 => Some(vec!["#fc8d59", "#ffffbf", "#91cf60"]),
                4 => Some(vec!["#d7191c", "#fdae61", "#a6d96a", "#1a9641"]),
                5 => Some(vec!["#d7191c", "#fdae61", "#ffffbf", "#a6d96a", "#1a9641"]),
                6 => Some(vec!["#d73027", "#fc8d59", "#fee08b", "#d9ef8b", "#91cf60", "#1a9850"]),
                7 => {
                    Some(vec!["#d73027", "#fc8d59", "#fee08b", "#ffffbf", "#d9ef8b", "#91cf60",
                              "#1a9850"])
                }
                8 => {
                    Some(vec!["#d73027", "#f46d43", "#fdae61", "#fee08b", "#d9ef8b", "#a6d96a",
                              "#66bd63", "#1a9850"])
                }
                9 => {
                    Some(vec!["#d73027", "#f46d43", "#fdae61", "#fee08b", "#ffffbf", "#d9ef8b",
                              "#a6d96a", "#66bd63", "#1a9850"])
                }
                10 => {
                    Some(vec!["#a50026", "#d73027", "#f46d43", "#fdae61", "#fee08b", "#d9ef8b",
                              "#a6d96a", "#66bd63", "#1a9850", "#006837"])
                }
                11 => {
                    Some(vec!["#a50026", "#d73027", "#f46d43", "#fdae61", "#fee08b", "#ffffbf",
                              "#d9ef8b", "#a6d96a", "#66bd63", "#1a9850", "#006837"])
                }
                _ => None,
            }
        }
        Palette::Accent => {
            match nb_value {
                3 => Some(vec!["#7fc97f", "#beaed4", "#fdc086"]),
                4 => Some(vec!["#7fc97f", "#beaed4", "#fdc086", "#ffff99"]),
                5 => Some(vec!["#7fc97f", "#beaed4", "#fdc086", "#ffff99", "#386cb0"]),
                6 => Some(vec!["#7fc97f", "#beaed4", "#fdc086", "#ffff99", "#386cb0", "#f0027f"]),
                7 => {
                    Some(vec!["#7fc97f", "#beaed4", "#fdc086", "#ffff99", "#386cb0", "#f0027f",
                              "#bf5b17"])
                }
                8 => {
                    Some(vec!["#7fc97f", "#beaed4", "#fdc086", "#ffff99", "#386cb0", "#f0027f",
                              "#bf5b17", "#666666"])
                }
                _ => None,
            }
        }
        Palette::Dark2 => {
            match nb_value {
                3 => Some(vec!["#1b9e77", "#d95f02", "#7570b3"]),
                4 => Some(vec!["#1b9e77", "#d95f02", "#7570b3", "#e7298a"]),
                5 => Some(vec!["#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#66a61e"]),
                6 => Some(vec!["#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#66a61e", "#e6ab02"]),
                7 => {
                    Some(vec!["#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#66a61e", "#e6ab02",
                              "#a6761d"])
                }
                8 => {
                    Some(vec!["#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#66a61e", "#e6ab02",
                              "#a6761d", "#666666"])
                }
                _ => None,
            }
        }
        Palette::Paired => {
            match nb_value {
                3 => Some(vec!["#a6cee3", "#1f78b4", "#b2df8a"]),
                4 => Some(vec!["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c"]),
                5 => Some(vec!["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99"]),
                6 => Some(vec!["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c"]),
                7 => {
                    Some(vec!["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c",
                              "#fdbf6f"])
                }
                8 => {
                    Some(vec!["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c",
                              "#fdbf6f", "#ff7f00"])
                }
                9 => {
                    Some(vec!["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c",
                              "#fdbf6f", "#ff7f00", "#cab2d6"])
                }
                10 => {
                    Some(vec!["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c",
                              "#fdbf6f", "#ff7f00", "#cab2d6", "#6a3d9a"])
                }
                11 => {
                    Some(vec!["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c",
                              "#fdbf6f", "#ff7f00", "#cab2d6", "#6a3d9a", "#ffff99"])
                }
                12 => {
                    Some(vec!["#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c",
                              "#fdbf6f", "#ff7f00", "#cab2d6", "#6a3d9a", "#ffff99", "#b15928"])
                }
                _ => None,
            }
        }
        Palette::Pastel1 => {
            match nb_value {
                3 => Some(vec!["#fbb4ae", "#b3cde3", "#ccebc5"]),
                4 => Some(vec!["#fbb4ae", "#b3cde3", "#ccebc5", "#decbe4"]),
                5 => Some(vec!["#fbb4ae", "#b3cde3", "#ccebc5", "#decbe4", "#fed9a6"]),
                6 => Some(vec!["#fbb4ae", "#b3cde3", "#ccebc5", "#decbe4", "#fed9a6", "#ffffcc"]),
                7 => {
                    Some(vec!["#fbb4ae", "#b3cde3", "#ccebc5", "#decbe4", "#fed9a6", "#ffffcc",
                              "#e5d8bd"])
                }
                8 => {
                    Some(vec!["#fbb4ae", "#b3cde3", "#ccebc5", "#decbe4", "#fed9a6", "#ffffcc",
                              "#e5d8bd", "#fddaec"])
                }
                9 => {
                    Some(vec!["#fbb4ae", "#b3cde3", "#ccebc5", "#decbe4", "#fed9a6", "#ffffcc",
                              "#e5d8bd", "#fddaec", "#f2f2f2"])
                }
                _ => None,
            }
        }
        Palette::Pastel2 => {
            match nb_value {
                3 => Some(vec!["#b3e2cd", "#fdcdac", "#cbd5e8"]),
                4 => Some(vec!["#b3e2cd", "#fdcdac", "#cbd5e8", "#f4cae4"]),
                5 => Some(vec!["#b3e2cd", "#fdcdac", "#cbd5e8", "#f4cae4", "#e6f5c9"]),
                6 => Some(vec!["#b3e2cd", "#fdcdac", "#cbd5e8", "#f4cae4", "#e6f5c9", "#fff2ae"]),
                7 => {
                    Some(vec!["#b3e2cd", "#fdcdac", "#cbd5e8", "#f4cae4", "#e6f5c9", "#fff2ae",
                              "#f1e2cc"])
                }
                8 => {
                    Some(vec!["#b3e2cd", "#fdcdac", "#cbd5e8", "#f4cae4", "#e6f5c9", "#fff2ae",
                              "#f1e2cc", "#cccccc"])
                }
                _ => None,
            }
        }
        Palette::Set1 => {
            match nb_value {
                3 => Some(vec!["#e41a1c", "#377eb8", "#4daf4a"]),
                4 => Some(vec!["#e41a1c", "#377eb8", "#4daf4a", "#984ea3"]),
                5 => Some(vec!["#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00"]),
                6 => Some(vec!["#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00", "#ffff33"]),
                7 => {
                    Some(vec!["#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00", "#ffff33",
                              "#a65628"])
                }
                8 => {
                    Some(vec!["#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00", "#ffff33",
                              "#a65628", "#f781bf"])
                }
                9 => {
                    Some(vec!["#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00", "#ffff33",
                              "#a65628", "#f781bf", "#999999"])
                }
                _ => None,
            }
        }
        Palette::Set2 => {
            match nb_value {
                3 => Some(vec!["#66c2a5", "#fc8d62", "#8da0cb"]),
                4 => Some(vec!["#66c2a5", "#fc8d62", "#8da0cb", "#e78ac3"]),
                5 => Some(vec!["#66c2a5", "#fc8d62", "#8da0cb", "#e78ac3", "#a6d854"]),
                6 => Some(vec!["#66c2a5", "#fc8d62", "#8da0cb", "#e78ac3", "#a6d854", "#ffd92f"]),
                7 => {
                    Some(vec!["#66c2a5", "#fc8d62", "#8da0cb", "#e78ac3", "#a6d854", "#ffd92f",
                              "#e5c494"])
                }
                8 => {
                    Some(vec!["#66c2a5", "#fc8d62", "#8da0cb", "#e78ac3", "#a6d854", "#ffd92f",
                              "#e5c494", "#b3b3b3"])
                }
                _ => None,
            }
        }
        Palette::Set3 => {
            match nb_value {
                3 => Some(vec!["#8dd3c7", "#ffffb3", "#bebada"]),
                4 => Some(vec!["#8dd3c7", "#ffffb3", "#bebada", "#fb8072"]),
                5 => Some(vec!["#8dd3c7", "#ffffb3", "#bebada", "#fb8072", "#80b1d3"]),
                6 => Some(vec!["#8dd3c7", "#ffffb3", "#bebada", "#fb8072", "#80b1d3", "#fdb462"]),
                7 => {
                    Some(vec!["#8dd3c7", "#ffffb3", "#bebada", "#fb8072", "#80b1d3", "#fdb462",
                              "#b3de69"])
                }
                8 => {
                    Some(vec!["#8dd3c7", "#ffffb3", "#bebada", "#fb8072", "#80b1d3", "#fdb462",
                              "#b3de69", "#fccde5"])
                }
                9 => {
                    Some(vec!["#8dd3c7", "#ffffb3", "#bebada", "#fb8072", "#80b1d3", "#fdb462",
                              "#b3de69", "#fccde5", "#d9d9d9"])
                }
                10 => {
                    Some(vec!["#8dd3c7", "#ffffb3", "#bebada", "#fb8072", "#80b1d3", "#fdb462",
                              "#b3de69", "#fccde5", "#d9d9d9", "#bc80bd"])
                }
                11 => {
                    Some(vec!["#8dd3c7", "#ffffb3", "#bebada", "#fb8072", "#80b1d3", "#fdb462",
                              "#b3de69", "#fccde5", "#d9d9d9", "#bc80bd", "#ccebc5"])
                }
                12 => {
                    Some(vec!["#8dd3c7", "#ffffb3", "#bebada", "#fb8072", "#80b1d3", "#fdb462",
                              "#b3de69", "#fccde5", "#d9d9d9", "#bc80bd", "#ccebc5", "#ffed6f"])
                }
                _ => None,
            }
        }
    }
}


#[cfg(test)]
mod tests {
    use {Palette, get_color_ramp};
    #[test]
    fn it_works() {
        let ramp = get_color_ramp(Palette::Pastel2, 3);
        assert_eq!(ramp, Some(vec!["#b3e2cd", "#fdcdac", "#cbd5e8"]));

        let palette_pastel2: Palette = "Pastel2".parse().unwrap();
        assert_eq!(palette_pastel2, Palette::Pastel2);
        assert_eq!(get_color_ramp(palette_pastel2, 3), ramp);
    }
}