(formatStr string, callback formatStringInterpolator, maxPrecision int)
| 844 | } |
| 845 | |
| 846 | func parseFormattingClause(formatStr string, callback formatStringInterpolator, maxPrecision int) (int, clauseImpl, error) { |
| 847 | i := 0 |
| 848 | read, precision, err := parsePrecision(formatStr[i:], maxPrecision) |
| 849 | i += read |
| 850 | if err != nil { |
| 851 | return -1, nil, fmt.Errorf("error while parsing precision: %w", err) |
| 852 | } |
| 853 | r := rune(formatStr[i]) |
| 854 | i++ |
| 855 | switch r { |
| 856 | case 's': |
| 857 | return i, callback.String, nil |
| 858 | case 'd': |
| 859 | return i, callback.Decimal, nil |
| 860 | case 'f': |
| 861 | return i, callback.Fixed(precision), nil |
| 862 | case 'e': |
| 863 | return i, callback.Scientific(precision), nil |
| 864 | case 'b': |
| 865 | return i, callback.Binary, nil |
| 866 | case 'x', 'X': |
| 867 | return i, callback.Hex(unicode.IsUpper(r)), nil |
| 868 | case 'o': |
| 869 | return i, callback.Octal, nil |
| 870 | default: |
| 871 | return -1, nil, fmt.Errorf("unrecognized formatting clause \"%c\"", r) |
| 872 | } |
| 873 | } |
| 874 | |
| 875 | func parsePrecision(formatStr string, maxPrecision int) (int, *int, error) { |
| 876 | i := 0 |
no test coverage detected