// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package common

import (
	"fmt"
	"strings"
)

func SingleQuote(s string) string {
	s = strings.ReplaceAll(s, `\`, `\\`)
	s = strings.ReplaceAll(s, `'`, `\'`)
	return fmt.Sprintf(`'%s'`, s)
}

// PrintableASCIIRune reports whether r is a printable ASCII rune, i.e. in the
// range 0x20 to 0x7E.
func PrintableASCIIRune(r rune) bool {
	return 0x20 <= r && r <= 0x7e
}

// PrintableASCII reports whether s is made of only printable ASCII runes.
func PrintableASCII(s string) bool {
	for _, r := range s {
		if !PrintableASCIIRune(r) {
			return false
		}
	}
	return true
}
