func (d HostingDiffs) Strings() []string {
	diffs := make([]string, 0, d.Cap())
	if len(d.Added) > 0 {
		diffs = append(diffs, "New hosting files")
		for _, added := range d.Added {
			diffs = append(diffs, terminal.Indent+"+ "+added.FilePath)
		}
	}
	if len(d.Deleted) > 0 {
		diffs = append(diffs, "Removed hosting files")
		for _, deleted := range d.Deleted {
			diffs = append(diffs, terminal.Indent+"- "+deleted.FilePath)
		}
	}
	if len(d.Modified) > 0 {
		diffs = append(diffs, "Modified hosting files")
		for _, modified := range d.Modified {
			diffs = append(diffs, terminal.Indent+"* "+modified.FilePath)
		}
	}
	return diffs
}
Strings returns the hosting diffs' formatted output
package local
import (
	"bytes"
	"crypto/md5"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"
	"path/filepath"
	"sort"
	"strings"
	"sync"
	"github.com/10gen/realm-cli/internal/cloud/realm"
	"github.com/10gen/realm-cli/internal/terminal"
	"github.com/10gen/realm-cli/internal/utils/api"
)
const (
	numHostingWorkers = 4
)
var (
	validAttrNames = map[string]struct{}{
		api.HeaderContentType:             {},
		api.HeaderContentDisposition:      {},
		api.HeaderContentLanguage:         {},
		api.HeaderContentEncoding:         {},
		api.HeaderCacheControl:            {},
		api.HeaderWebsiteRedirectLocation: {},
	}
)
type Hosting struct {
	RootDir string
}
type HostingAssetClient interface {
	Get(url string) (*http.Response, error)
}
func FindAppHosting(path string) (Hosting, error) {
	app, ok, err := FindApp(path)
	if err != nil {
		return Hosting{}, err
	}
	if !ok {
		return Hosting{}, nil
	}
	rootDir := filepath.Join(app.RootDir, NameHosting)
	return Hosting{rootDir}, nil
}
type HostingDiffs struct {
	Added    []realm.HostingAsset
	Deleted  []realm.HostingAsset
	Modified []ModifiedHostingAsset
}
func (d HostingDiffs) Cap() int {
	return d.Size() + 3
}
func (d HostingDiffs) Size() int {
	return len(d.Added) + len(d.Deleted) + len(d.Modified)
}